@ipohjs/calendar
Version:
Minimal module to compute a calendar
35 lines • 1.43 kB
JavaScript
import { fromPartsToUtcDate } from './from-parts-to-utc-date.js';
export function toUTCDate(inputDate, offset) {
const offsetYear = offset?.year ?? 0;
const offsetMonth = offset?.month ?? 0;
const offsetDate = offset?.day ?? 0;
const offsetOrder = offset?.order ?? 'ymd';
let y = inputDate.getUTCFullYear();
let m = inputDate.getUTCMonth();
let d = inputDate.getUTCDate();
const reorderedParts = [...offsetOrder].map((n) => {
switch (n) {
case 'y': return [n, [offsetYear, 0, 0]];
case 'm': return [n, [0, offsetMonth, 0]];
case 'd':
default:
return [n, [0, 0, offsetDate]];
}
});
for (const [key, [dy, dm, dd]] of reorderedParts) {
const newDate = fromPartsToUtcDate(y + dy, m + dm, d + dd);
const lastDayOfNewDateCurrentMonth = fromPartsToUtcDate(newDate.getUTCFullYear(), m + dm + 1, 0);
if (key !== 'd' && d + dd > lastDayOfNewDateCurrentMonth.getUTCDate()) {
y = lastDayOfNewDateCurrentMonth.getUTCFullYear();
m = lastDayOfNewDateCurrentMonth.getUTCMonth();
d = lastDayOfNewDateCurrentMonth.getUTCDate();
}
else {
y = newDate.getUTCFullYear();
m = newDate.getUTCMonth();
d = newDate.getUTCDate();
}
}
return fromPartsToUtcDate(y, m, d);
}
//# sourceMappingURL=to-utc-date.js.map