@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.
40 lines (39 loc) • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.validateDateTime = validateDateTime;
var _types = require("@storm-stack/types");
var _constants = require("../constants.cjs");
var _isDateTime = require("./is-date-time.cjs");
var _isInstant = require("./is-instant.cjs");
var _validateDate = require("./validate-date.cjs");
var _validateTime = require("./validate-time.cjs");
function validateDateTime(value, options) {
if ((0, _isDateTime.isDateTime)(value)) {
return value.valid;
}
if ((0, _isInstant.isInstant)(value)) {
return Boolean(value.epochMilliseconds);
}
let datetime;
if ((0, _types.isDate)(value) || (0, _types.isNumber)(value) || (0, _types.isBigInt)(value)) {
const date = (0, _types.isNumber)(value) || (0, _types.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 (!_constants.RFC_3339_DATE_TIME_REGEX.test(datetime)) {
return false;
}
if (!Date.parse(datetime)) {
return false;
}
return Boolean((0, _validateDate.validateDate)(datetime.slice(0, Math.max(0, datetime.indexOf("T"))), options) && (0, _validateTime.validateTime)(datetime.slice(Math.max(0, datetime.indexOf("T") + 1)), options));
}