UNPKG

react-day-picker

Version:

Customizable Date Picker for React

56 lines (51 loc) 1.39 kB
import { addWeeks, endOfMonth, getWeeksInMonth, Locale, startOfMonth } from 'date-fns'; import { daysToMonthWeeks } from './daysToMonthWeeks'; /** Represents a week in the month.*/ export type MonthWeek = { /** The week number from the start of the year. */ weekNumber: number; /** The dates in the week. */ dates: Date[]; }; /** * Return the weeks belonging to the given month, adding the "outside days" to * the first and last week. */ export function getMonthWeeks( month: Date, options: { locale: Locale; useFixedWeeks?: boolean; weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6; firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7; ISOWeek?: boolean; } ): MonthWeek[] { const weeksInMonth: MonthWeek[] = daysToMonthWeeks( startOfMonth(month), endOfMonth(month), options ); if (options?.useFixedWeeks) { // Add extra weeks to the month, up to 6 weeks const nrOfMonthWeeks = getWeeksInMonth(month, options); if (nrOfMonthWeeks < 6) { const lastWeek = weeksInMonth[weeksInMonth.length - 1]; const lastDate = lastWeek.dates[lastWeek.dates.length - 1]; const toDate = addWeeks(lastDate, 6 - nrOfMonthWeeks); const extraWeeks = daysToMonthWeeks( addWeeks(lastDate, 1), toDate, options ); weeksInMonth.push(...extraWeeks); } } return weeksInMonth; }