@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
JavaScript
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
)
);
}