postgrejs
Version:
Professional PostgreSQL client NodeJS
76 lines (75 loc) • 2.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ArrayDateType = exports.DateType = void 0;
const constants_js_1 = require("../constants.js");
const parse_datetime_js_1 = require("../util/parse-datetime.js");
const timeShift = 946684800000;
exports.DateType = {
name: 'date',
oid: constants_js_1.DataTypeOIDs.date,
jsType: 'Date',
parseBinary(v, options) {
const fetchAsString = options.fetchAsString &&
options.fetchAsString.includes(constants_js_1.DataTypeOIDs.date);
const t = v.readInt32BE();
if (t === 0x7fffffff)
return fetchAsString ? 'infinity' : Infinity;
if (t === -0x80000000)
return fetchAsString ? '-infinity' : -Infinity;
// Shift from 2000 to 1970
let d = new Date(t * 1000 * 86400 + timeShift);
if (fetchAsString || !options.utcDates)
d = new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate());
return fetchAsString ? dateToDateString(d) : d;
},
encodeBinary(buf, v, options) {
if (typeof v === 'string')
v = (0, parse_datetime_js_1.parseDateTime)(v, false, false, options.utcDates);
if (v === Infinity) {
buf.writeInt32BE(0x7fffffff);
return;
}
if (v === -Infinity) {
buf.writeInt32BE(-0x80000000);
return;
}
if (!(v instanceof Date))
v = new Date(v);
let n = options.utcDates
? v.getTime()
: v.getTime() - v.getTimezoneOffset() * 60 * 1000;
n = (n - timeShift) / 1000 / 86400;
const t = Math.trunc(n + Number.EPSILON);
buf.writeInt32BE(t);
},
parseText(v, options) {
const fetchAsString = options.fetchAsString &&
options.fetchAsString.includes(constants_js_1.DataTypeOIDs.date);
if (fetchAsString)
return v;
return (0, parse_datetime_js_1.parseDateTime)(v, false, false, options.utcDates);
},
isType(v) {
return (v instanceof Date &&
v.getHours() === 0 &&
v.getMinutes() === 0 &&
v.getSeconds() === 0 &&
v.getMilliseconds() === 0);
},
};
function padZero(v) {
return v < 9 ? '0' + v : '' + v;
}
function dateToDateString(d) {
return (d.getFullYear() +
'-' +
padZero(d.getMonth() + 1) +
'-' +
padZero(d.getDate()));
}
exports.ArrayDateType = {
...exports.DateType,
name: '_date',
oid: constants_js_1.DataTypeOIDs._date,
elementsOID: constants_js_1.DataTypeOIDs.date,
};