UNPKG

ravendb

Version:
80 lines 2.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DateUtil = void 0; const index_js_1 = require("../Exceptions/index.js"); const date_fns_1 = require("date-fns"); class DateUtil { opts; static DEFAULT_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'0000'"; static DEFAULT_DATE_TZ_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'0000'xxx"; static default = new DateUtil({}); static utc = new DateUtil({ useUtcDates: true }); static tz = new DateUtil({ withTimezone: true }); constructor(opts) { this.opts = opts; } static timestamp() { return Math.floor(new Date().getTime() / 1000); } static timestampMs() { return new Date().getTime(); } static zeroDate() { return new Date(0); } parse(dateString) { if (!dateString) { return null; } dateString = DateUtil.alignPrecision(dateString); let parsed; if (this.opts.withTimezone) { parsed = (0, date_fns_1.parse)(dateString, DateUtil.DEFAULT_DATE_TZ_FORMAT, new Date()); } else if (this.opts.useUtcDates || dateString.endsWith("Z")) { if (!dateString.endsWith("Z")) { dateString += "Z"; } parsed = (0, date_fns_1.parseISO)(dateString); } else { parsed = (0, date_fns_1.parse)(dateString, DateUtil.DEFAULT_DATE_FORMAT, new Date()); } if (isNaN(parsed.getTime())) { (0, index_js_1.throwError)("InvalidArgumentException", `Could not parse date string '${dateString}'.`); } return parsed; } static alignPrecision(date) { const hasZ = date.endsWith("Z"); if (hasZ) { date = date.slice(0, -1); } const lastDot = date.lastIndexOf("."); const tzPlusIndex = date.indexOf("+", lastDot); const tzMinusIndex = date.indexOf("-", lastDot); const tzIndex = Math.max(tzPlusIndex, tzMinusIndex); let tzSuffix = ""; if (tzIndex !== -1) { tzSuffix = date.substring(tzIndex); date = date.slice(0, tzIndex - 1); } const suffix = "0000" + tzSuffix + (hasZ ? "Z" : ""); if (lastDot === -1 || lastDot < date.length - 3) { return date.slice(0, lastDot + 4) + suffix; } return date + suffix; } stringify(date) { if (this.opts.useUtcDates) { const utcString = date.toISOString().slice(0, -1); return this.opts.withTimezone ? utcString + "0000+00:00" : utcString + "0000Z"; } const dateFormat = this.opts.withTimezone ? DateUtil.DEFAULT_DATE_TZ_FORMAT : DateUtil.DEFAULT_DATE_FORMAT; return (0, date_fns_1.format)(date, dateFormat); } } exports.DateUtil = DateUtil; //# sourceMappingURL=DateUtil.js.map