lbdate
Version:
JavaScript Date object serialization helper.
54 lines • 2.42 kB
JavaScript
import { cloneDate, isMoment } from '../helpers';
import { formatTimeZone } from './format-time-zone';
export function toJsonMethodFactory(mergedOptions, lastToNativeJsonName) {
const { timezone, toNativeJsonName, manualTimeZoneOffset, precision } = mergedOptions;
const msInMin = 6e4;
const charsToRemove = precision == 0 ? -4 : precision - 3;
const nativeToJsonFuncKey = lastToNativeJsonName ||
Date.prototype.hasOwnProperty(toNativeJsonName) ?
toNativeJsonName :
Date.prototype.toISOString.name;
let toJsonMethod;
switch (timezone) {
case "Auto" /* auto */:
toJsonMethod = function () {
const offSetMins = this.getTimezoneOffset();
const date = cloneDate(this.getTime() - offSetMins * msInMin);
let stringDate = date[nativeToJsonFuncKey]();
stringDate = stringDate.slice(0, -1 + charsToRemove);
return stringDate + formatTimeZone(offSetMins);
};
break;
case "Manual" /* manual */:
toJsonMethod = function () {
const offSetMins = manualTimeZoneOffset || 0;
const date = cloneDate(this.getTime() - offSetMins * msInMin);
let stringDate = date[nativeToJsonFuncKey]();
stringDate = stringDate.slice(0, -1 + charsToRemove);
return stringDate + formatTimeZone(offSetMins);
};
break;
case "None" /* none */:
toJsonMethod = function () {
const offSetMins = this.getTimezoneOffset();
const date = cloneDate(this.getTime() - offSetMins * msInMin);
const stringDate = date[nativeToJsonFuncKey]();
return stringDate.slice(0, -1 + charsToRemove);
};
break;
case "UTC" /* utc */:
toJsonMethod = function () {
const date = cloneDate(this);
const stringDate = date[nativeToJsonFuncKey]();
return stringDate.slice(0, -1 + charsToRemove) + 'Z';
};
break;
}
return function () {
let date = null;
if (isMoment(this))
date = new Date(this.valueOf());
return toJsonMethod.call(date || this);
};
}
//# sourceMappingURL=to-json-method-factory.js.map