@lion/calendar
Version:
Standalone calendar
38 lines (34 loc) • 932 B
JavaScript
import { createDay } from './createDay.js';
/**
* @param {Date} date
* @param {Object} opts
* @param {number} [opts.firstDayOfWeek]
* @returns {import('../../types/day').Week}
*/
export function createWeek(date, { firstDayOfWeek = 0 } = {}) {
if (Object.prototype.toString.call(date) !== '[object Date]') {
throw new Error('invalid date provided');
}
let weekStartDate = new Date(date);
const tmpDate = new Date(date);
while (tmpDate.getDay() !== firstDayOfWeek) {
tmpDate.setDate(tmpDate.getDate() - 1);
weekStartDate = new Date(tmpDate);
}
const week = {
/** @type {import('../../types/day').Day[]} */
days: [],
};
for (let i = 0; i < 7; i += 1) {
if (i !== 0) {
weekStartDate.setDate(weekStartDate.getDate() + 1);
}
week.days.push(
createDay(new Date(weekStartDate), {
weekOrder: i,
startOfWeek: i === 0,
}),
);
}
return week;
}