UNPKG

cosmos-db-repositories

Version:
67 lines (66 loc) 2.71 kB
"use strict"; 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 };