UNPKG

@leancodepl/api-date-dayjs

Version:

Day.js integration for API date type conversion

109 lines (97 loc) 2.91 kB
'use strict'; var apiDate = require('@leancodepl/api-date'); var dayjs = require('dayjs'); var customParseFormat = require('dayjs/plugin/customParseFormat'); var utc = require('dayjs/plugin/utc'); var duration = require('dayjs/plugin/duration'); var apiDateUtils = require('@leancodepl/api-date-utils'); dayjs.extend(customParseFormat); function fromApiTime(time) { if (!time) { return undefined; } return dayjs(time, "HH:mm:ss.SSS"); } function toApiTime(time) { if (!time) { return undefined; } return time.format("HH:mm:ss.SSS"); } function fromApiDate(date) { if (!date) { return undefined; } return dayjs(date); } dayjs.extend(utc); /** * This function keeps local time (excluding timezone/offset) but sets its offset to UTC */ function dropLocalOffset(time) { return time.clone().utc(true); } function toApiDate(date) { if (!date) { return undefined; } return dropLocalOffset(date).startOf("day").format("YYYY-MM-DD"); } dayjs.extend(customParseFormat); function fromApiDateTimeOffset(datetime) { if (!datetime) { return undefined; } return dayjs(datetime, "YYYY-MM-DDTHH:mm:ss.SSSZ"); } function toApiDateTimeOffset(time) { if (!time) { return undefined; } return time.format("YYYY-MM-DDTHH:mm:ss.SSSZ"); } dayjs.extend(duration); function fromApiTimeSpan(timeSpan) { if (!timeSpan) { return undefined; } const parsedDuration = apiDateUtils.parseApiTimeSpan(timeSpan); const isNegative = parsedDuration.sign === "-"; const dayjsDuration = dayjs.duration(parsedDuration.values); if (isNegative) { return dayjs.duration(-dayjsDuration.asMilliseconds()); } return dayjsDuration; } dayjs.extend(duration); function toApiTimeSpan(duration) { if (!duration) { return undefined; } const isNegative = duration.asMilliseconds() < 0; const absDuration = dayjs.duration(Math.abs(duration.asMilliseconds())); const days = Math.floor(absDuration.asDays()); let stringTimeSpan = ""; if (isNegative) { stringTimeSpan += "-"; } if (days > 0) { stringTimeSpan += `${days}.`; } stringTimeSpan += absDuration.format("HH:mm:ss.SSS"); return stringTimeSpan; } exports.dropLocalOffset = dropLocalOffset; exports.fromApiDate = fromApiDate; exports.fromApiDateTimeOffset = fromApiDateTimeOffset; exports.fromApiTime = fromApiTime; exports.fromApiTimeSpan = fromApiTimeSpan; exports.toApiDate = toApiDate; exports.toApiDateTimeOffset = toApiDateTimeOffset; exports.toApiTime = toApiTime; exports.toApiTimeSpan = toApiTimeSpan; Object.keys(apiDate).forEach(function (k) { if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, { enumerable: true, get: function () { return apiDate[k]; } }); });