Files
Moltbot/src/logging/timestamps.ts

37 lines
1.0 KiB
TypeScript

export function isValidTimeZone(tz: string): boolean {
try {
new Intl.DateTimeFormat("en", { timeZone: tz });
return true;
} catch {
return false;
}
}
export function formatLocalIsoWithOffset(now: Date, timeZone?: string): string {
const explicit = timeZone ?? process.env.TZ;
const tz =
explicit && isValidTimeZone(explicit)
? explicit
: Intl.DateTimeFormat().resolvedOptions().timeZone;
const fmt = new Intl.DateTimeFormat("en", {
timeZone: tz,
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false,
fractionalSecondDigits: 3 as 1 | 2 | 3,
timeZoneName: "longOffset",
});
const parts = Object.fromEntries(fmt.formatToParts(now).map((p) => [p.type, p.value]));
const offsetRaw = parts.timeZoneName ?? "GMT";
const offset = offsetRaw === "GMT" ? "+00:00" : offsetRaw.slice(3);
return `${parts.year}-${parts.month}-${parts.day}T${parts.hour}:${parts.minute}:${parts.second}.${parts.fractionalSecond}${offset}`;
}