vremel
Version:
JavaScript date utility library for Temporal API
42 lines • 1.98 kB
JavaScript
import { UTCDate } from "@date-fns/utc";
import { isPlainDate, isPlainMonthDay, isPlainTime, isPlainYearMonth, isZonedDateTime, } from "../type-utils.js";
function parseIsoString(date) {
const res = /^(\d{4,})-(\d{2})-(\d{2})/.exec(date);
if (res === null) {
throw new Error("Invalid format");
}
const [, y, m, d] = res;
if (y === undefined || m === undefined || d === undefined) {
throw new Error("Invalid format");
}
return {
year: parseInt(y, 10),
month: parseInt(m, 10),
day: parseInt(d, 10),
};
}
export function toDateFromClockTime(dateTime, DateConstructor) {
const DateConstructorFunction = DateConstructor ?? UTCDate;
if (isPlainYearMonth(dateTime)) {
const pd = dateTime.toPlainDate({ day: 1 }).withCalendar("iso8601");
return new DateConstructorFunction(pd.year, pd.month - 1, pd.day);
}
if (isPlainMonthDay(dateTime)) {
if (dateTime.calendarId === "iso8601") {
const pd = dateTime.toPlainDate({ year: 1972 });
return new DateConstructorFunction(pd.year, pd.month - 1, pd.day);
}
const { year, month, day } = parseIsoString(dateTime.toString());
return new DateConstructorFunction(year, month - 1, day);
}
if (isPlainTime(dateTime)) {
// Set default date to 2000-01-01
return new DateConstructorFunction(2000, 0, 1, dateTime.hour, dateTime.minute, dateTime.second, dateTime.millisecond);
}
const plainDateTime = isZonedDateTime(dateTime) ?
dateTime.toPlainDateTime().withCalendar("iso8601")
: isPlainDate(dateTime) ? dateTime.toPlainDateTime().withCalendar("iso8601")
: dateTime.withCalendar("iso8601");
return new DateConstructorFunction(plainDateTime.year, plainDateTime.month - 1, plainDateTime.day, plainDateTime.hour, plainDateTime.minute, plainDateTime.second, plainDateTime.millisecond);
}
//# sourceMappingURL=toDateFromClockTime.js.map