@leancodepl/api-date-dayjs
Version:
Day.js integration for API date type conversion
109 lines (97 loc) • 2.91 kB
JavaScript
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]; }
});
});
;