postgrejs
Version:
Professional PostgreSQL client NodeJS
38 lines (37 loc) • 1.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseDateTime = parseDateTime;
// noinspection RegExpUnnecessaryNonCapturingGroup
const fast_parseint_js_1 = require("./fast-parseint.js");
// noinspection RegExpUnnecessaryNonCapturingGroup
const TIMESTAMP_PATTERN = /^(\d{4})-?(0[1-9]|1[012])?-?([123]0|[012][1-9]|31)?(?:[T ]?([01][0-9]|2[0-3]):?([0-5][0-9]):?([0-5][0-9])?(?:\.(\d+))?(?:(Z)|(?:([+-])([01]?[0-9]|2[0-3]):?([0-5][0-9])?))?)?$/;
const INFINITY_PATTERN = /^-?infinity$/;
function parseDateTime(str, parseTime, parseTimeZone, utc) {
let m = str.match(TIMESTAMP_PATTERN);
if (!m) {
m = str.match(INFINITY_PATTERN);
if (m)
return Number(str.replace('i', 'I'));
return new Date('invalid');
}
const args = [
1970, 0, 1, 0, 0, 0, 0,
];
const l = parseTime ? 7 : 3;
for (let i = 0; i < l; i++) {
const s = m[i + 1];
args[i] = (0, fast_parseint_js_1.fastParseInt)(s) || 0;
}
// Months starts from 0
if (args[1] > 0)
args[1]--;
if (parseTimeZone && parseTime && m[9]) {
const r = m[9] === '-' ? -1 : 1;
args[3] -= ((0, fast_parseint_js_1.fastParseInt)(m[10]) || 0) * r;
args[4] -= ((0, fast_parseint_js_1.fastParseInt)(m[11]) || 0) * r;
return new Date(Date.UTC(...args));
}
if (m[8] || utc)
return new Date(Date.UTC(...args));
return new Date(...args);
}