UNPKG

@storm-stack/date-time

Version:

This package includes a DateTime class, various utility functions for working with dates and times, and a number of formatting options.

43 lines (42 loc) 1.26 kB
import { isBigInt, isDate, isNumber } from "@storm-stack/types"; import { RFC_3339_DATE_TIME_REGEX } from "../constants.mjs"; import { isDateTime } from "./is-date-time.mjs"; import { isInstant } from "./is-instant.mjs"; import { validateDate } from "./validate-date.mjs"; import { validateTime } from "./validate-time.mjs"; export function validateDateTime(value, options) { if (isDateTime(value)) { return value.valid; } if (isInstant(value)) { return Boolean(value.epochMilliseconds); } let datetime; if (isDate(value) || isNumber(value) || isBigInt(value)) { const date = isNumber(value) || isBigInt(value) ? new Date(Number(value)) : value; if (Number.isNaN(date.getTime())) { return false; } datetime = date.toUTCString(); } else { datetime = value === null || value === void 0 ? void 0 : value.toUpperCase(); } if (!datetime) { return false; } if (!RFC_3339_DATE_TIME_REGEX.test(datetime)) { return false; } if (!Date.parse(datetime)) { return false; } return Boolean( validateDate( datetime.slice(0, Math.max(0, datetime.indexOf("T"))), options ) && validateTime( datetime.slice(Math.max(0, datetime.indexOf("T") + 1)), options ) ); }