cosmos-db-repositories
Version:
cosmos-db repositories
67 lines (66 loc) • 2.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.timeDuration = void 0;
const luxon_1 = require("luxon");
// Default time zone from environment variables or fallback to "Europe/Berlin"
const DEFAULT_ZONE = process.env.DEFAULT_ZONE || "Europe/Berlin";
/**
* Convert a local datetime string to a JavaScript `Date` object in UTC.
* @param localDateTime - ISO string representing the local datetime.
* @param zone - Optional: Override time zone (defaults to process.env.ZONE).
* @returns JavaScript `Date` object in UTC.
*/
const toUTC = (localDateTime, zone = DEFAULT_ZONE) => {
const isISO = true;
const utcDate = luxon_1.DateTime[isISO ? 'fromISO' : 'fromSQL'](localDateTime, { zone }).toUTC();
if (!utcDate.isValid)
throw new Error("Invalid date format provided.");
return utcDate.toJSDate(); // Returns a JavaScript Date object
};
/**
* Convert a UTC datetime (from CosmosDB) to local time as a `Date` object.
* @param utcDateTime - JavaScript `Date` object or ISO string.
* @param zone - Optional: Override time zone (defaults to process.env.ZONE).
* @returns JavaScript `Date` object in local time.
*/
const toLocalTime = (utcDateTime, zone = DEFAULT_ZONE) => {
const dt = typeof utcDateTime === "string"
? luxon_1.DateTime.fromISO(utcDateTime, { zone: "utc" }) // If input is a string
: luxon_1.DateTime.fromJSDate(utcDateTime).setZone("utc"); // If input is a Date object
if (!dt.isValid)
throw new Error("Invalid date format provided.");
return dt.setZone(zone).toJSDate(); // Convert to JavaScript Date object
};
const iso8601Regex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/;
const isISO8601 = (value) => {
return iso8601Regex.test(value);
};
const dateRegex = /^\d{4}-\d{2}-\d{2}?$/;
const isDateFormat = (value) => {
return dateRegex.test(value);
};
const isDateTimeFormat = (value) => {
return isISO8601(value) || isDateFormat(value);
};
const timeDuration = (startDate, endDate) => {
let d = Math.abs(endDate - startDate) / 1000; // delta
const result = {}; // result
const s = {
hour: 3600,
minute: 60,
second: 1
};
const computeNumber = (n) => {
if (n > 9) {
return n;
}
return '0' + n;
};
Object.keys(s).forEach((key) => {
result[key] = Math.floor(d / s[key]);
d -= result[key] * s[key];
});
return computeNumber(result.hour) + ':' + computeNumber(result.minute) + ':' + computeNumber(result.second);
};
exports.timeDuration = timeDuration;
exports.default = { toUTC, toLocalTime, isISO8601, isDateFormat, isDateTimeFormat, timeDuration: exports.timeDuration };