UNPKG

vremel

Version:

JavaScript date utility library for Temporal API

42 lines 1.98 kB
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