pig-dam-core
Version:
Library that should be included in every Pig DAM project we build
86 lines (85 loc) • 2.19 kB
JavaScript
;
/**
* Date: 3/24/18
* Time: 3:40 AM
* @license MIT (see project's LICENSE file)
*
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.dateToISOString = exports.dateFromValue = exports.dateFromString = exports.datesAreEqual = exports.dateAdd = void 0;
const _ = require("lodash");
/**
* Offsets <param>data</param>
*/
function dateAdd(date, { days = 0, hours = 0, millis = 0, minutes = 0, seconds = 0 }) {
const offset = millis
+ seconds * 1000
+ minutes * 1000 * 60
+ hours * 1000 * 60 * 60
+ days * 1000 * 60 * 60 * 24;
return new Date(date.getTime() + offset);
}
exports.dateAdd = dateAdd;
/**
* Safely compares dates
*/
function datesAreEqual(date1, date2) {
if (date1 === date2) {
return true;
}
else if (date1 && date2) {
return date1.getTime() === date2.getTime();
}
else {
return false;
}
}
exports.datesAreEqual = datesAreEqual;
/**
* Does all he can to convert a string into a date object
* @throws {Error}
*/
function dateFromString(text) {
let result;
if (text != null) {
result = Date.parse(text);
if (isNaN(result) === false) {
result = new Date(result);
}
else {
throw new Error(`invalid date ${text}`);
}
}
return result;
}
exports.dateFromString = dateFromString;
/**
* Looks for the various known flavors of a date: Date, String, Number (assumes epoch)
* @throws {Error}
*/
function dateFromValue(value) {
if (value == null) {
return undefined;
}
else if (typeof value === "string") {
return dateFromString(value);
}
else if (typeof value === "number") {
return new Date(value);
}
else if (_.isDate(value)) {
return value;
}
throw new Error(`unknown date value ${value}`);
}
exports.dateFromValue = dateFromValue;
/**
* Allows support for older encodings without millis
*/
function dateToISOString(date, millis = true) {
const result = date.toISOString();
return (millis)
? result
: result.replace(/\.\d+Z$/, "Z");
}
exports.dateToISOString = dateToISOString;