@burglekitt/gmt
Version:
Temporal-based date and time utilities with timezone support and polyfill integration
34 lines (33 loc) • 1.23 kB
JavaScript
import { Temporal } from "@js-temporal/polyfill";
import { isValidUnixUnit, } from "../../unix/validate/isValidUnixUnit.js";
import { isValidUtc } from "../validate/index.js";
/**
* Convert a UTC Instant string to a unix epoch value in milliseconds or seconds.
*
* - Uses Temporal.Instant.from to parse.
* - Validates unit ("seconds" | "milliseconds").
* - Returns null for invalid input.
*
* @param value UTC Instant string
* @param unit optional unit, "seconds" or "milliseconds"
* @returns epoch number or null on invalid
*
* @example convertUtcToUnix("2024-02-29T00:00:00Z") // 1709164800000
* @example convertUtcToUnix("2024-02-29T00:00:00Z", "seconds") // 1709164800
* @example convertUtcToUnix("invalid") // null
*/
export function convertUtcToUnix(value, ...unitInput) {
const resolvedUnit = unitInput.length === 0 ? "milliseconds" : unitInput[0];
if (!isValidUtc(value) || !isValidUnixUnit(resolvedUnit ?? "")) {
return null;
}
try {
const milliseconds = Number(Temporal.Instant.from(value).epochMilliseconds);
return resolvedUnit === "seconds"
? Math.floor(milliseconds / 1000)
: milliseconds;
}
catch {
return null;
}
}