UNPKG

@kwiz/common

Version:

KWIZ common utilities and helpers for M365 platform

168 lines 6.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.dateFormat = exports.toIsoDateFormat = void 0; const typecheckers_1 = require("../helpers/typecheckers"); const knownscript_1 = require("./knownscript"); /** return date format as yyyy-MM-ddTHH:mm:ssZ * Optionally: remove Z, remove seconds, or set time to zero */ function toIsoDateFormat(date, options) { let omitZ = options && options.omitZ === true || false; let omitSeconds = options && options.omitSeconds === true || false; let zeroTime = options && options.zeroTime === true || false; let addLocalTimezoneOffset = options && (0, typecheckers_1.isBoolean)(options.addLocalTimezoneOffset) ? options.addLocalTimezoneOffset : omitZ !== true; let format = `yyyy-MM-ddT${zeroTime ? '00:00' : 'HH:mm'}${omitSeconds ? '' : zeroTime ? ':00' : ':ss'}${omitZ ? '' : 'Z'}`; if (!(0, typecheckers_1.isFunction)(date.format)) { knownscript_1.LocaleKnownScript.loadSync(); } let oDate = new Date(date.getTime()); if (addLocalTimezoneOffset) { //If we do not omit Z, the caller wants to get the object's UTC time. //Date format will get the current local time - so we need to compensate. oDate = new Date(date.getTime() + (date.getTimezoneOffset() * 60000)); } let o = oDate.format(format); return o; } exports.toIsoDateFormat = toIsoDateFormat; function dateFormat(date, format) { let strResult = ""; //collect strings in the format, up to 4 in a row. let currentChar = ""; let currentToken = ""; var appendToken = (token) => { let ensureNumberOfLetters = 0; let result = token; let numTmp; switch (token) { case "d": result = date.getDate().toString(10); break; case "dd": result = date.getDate().toString(10); ensureNumberOfLetters = 2; break; case "ddd": result = Intl.DateTimeFormat(undefined, { weekday: "short" }).format(date); break; case "dddd": result = Intl.DateTimeFormat(undefined, { weekday: "long" }).format(date); break; case "h": numTmp = date.getHours(); if (numTmp > 12) numTmp -= 12; if (numTmp === 0) numTmp = 12; result = numTmp.toString(10); break; case "hh": numTmp = date.getHours(); if (numTmp > 12) numTmp -= 12; if (numTmp === 0) numTmp = 12; result = numTmp.toString(10); ensureNumberOfLetters = 2; break; case "H": result = date.getHours().toString(10); break; case "HH": result = date.getHours().toString(10); ensureNumberOfLetters = 2; break; case "m": result = date.getMinutes().toString(10); break; case "mm": result = date.getMinutes().toString(10); ensureNumberOfLetters = 2; break; case "M": result = (date.getMonth() + 1).toString(10); break; case "MM": result = (date.getMonth() + 1).toString(10); ensureNumberOfLetters = 2; break; case "MMM": result = Intl.DateTimeFormat(undefined, { month: "short" }).format(date); break; case "MMMM": result = Intl.DateTimeFormat(undefined, { month: "long" }).format(date); break; case "s": result = date.getSeconds().toString(10); break; case "ss": result = date.getSeconds().toString(10); ensureNumberOfLetters = 2; break; case "t": case "tt": numTmp = date.getHours(); result = Intl.DateTimeFormat(undefined, { hour12: true, hour: "2-digit" }).format(date).split(" ")[1]; break; case "y": result = date.getFullYear().toString(10).slice(2); break; case "yy": result = date.getFullYear().toString(10).slice(1); result = result.padStart(token.length, "0"); break; case "yyy": case "yyyy": result = date.getFullYear().toString(10); result = result.padStart(token.length, "0"); break; case "K": case "z": case "zz": case "zzz": result = ""; break; case "f": result = date.getMilliseconds().toString(10).slice(0, 1); break; case "ff": result = date.getMilliseconds().toString(10).slice(0, 2); break; case "fff": result = date.getMilliseconds().toString(10).slice(0, 3); break; case "ffff": result = date.getMilliseconds().toString(10).slice(0, 4); break; case "fffff": result = date.getMilliseconds().toString(10).slice(0, 5); break; case "ffffff": result = date.getMilliseconds().toString(10).slice(0, 6); break; case "fffffff": result = date.getMilliseconds().toString(10).slice(0, 7); break; } while (ensureNumberOfLetters > result.length) result = "0" + result; return result; }; for (var i = 0; i < format.length; i++) { let char = format[i]; if (char === currentChar) { currentToken += char; } else { strResult += appendToken(currentToken); currentToken = char; currentChar = char; } } strResult += appendToken(currentToken); return strResult; } exports.dateFormat = dateFormat; //# sourceMappingURL=date.js.map