@burglekitt/gmt
Version:
Temporal-based date and time utilities with timezone support and polyfill integration
39 lines (38 loc) • 1.66 kB
JavaScript
import { Temporal } from "@js-temporal/polyfill";
import { isValidTimeZone } from "../../zoned/index.js";
import { getSystemTimeZone } from "../../zoned/get/index.js";
import { isValidUnixMilliseconds, isValidUnixSeconds, isValidUnixUnit, } from "../validate/index.js";
/**
* Convert a Unix timestamp to a plain time string in the format "HH:mm:ss".
*
* - Converts to PlainTime using the specified or system timezone.
* - Validates epoch unit ("seconds" | "milliseconds").
* - Returns "" for invalid input.
*
* @param unix Unix timestamp (number)
* @param options optional: epochUnit ("seconds" | "milliseconds"), timeZone (IANA)
* @returns plain time string in "HH:mm:ss" format or "" on invalid input
*
* @example convertUnixToPlainTime(1706659200000) // "00:00:00"
* @example convertUnixToPlainTime(1706659200, { epochUnit: "seconds" }) // "00:00:00"
* @example convertUnixToPlainTime(-1) // "23:59:59.999"
*/
export function convertUnixToPlainTime(unix, options) {
const { epochUnit = "milliseconds", timeZone = getSystemTimeZone() } = options ?? {};
if (!isValidUnixUnit(epochUnit))
return "";
if (!isValidTimeZone(timeZone))
return "";
try {
if ((epochUnit === "milliseconds" && !isValidUnixMilliseconds(unix)) ||
(epochUnit === "seconds" && !isValidUnixSeconds(unix))) {
return "";
}
const instant = Temporal.Instant.fromEpochMilliseconds(epochUnit === "seconds" ? unix * 1000 : unix);
const zonedDateTime = instant.toZonedDateTimeISO(timeZone);
return zonedDateTime.toPlainTime().toString();
}
catch {
return "";
}
}