UNPKG

@bimeister/pupakit.calendar

Version:
22 lines 4.95 kB
import { DAYS_IN_WEEK } from '../constants/days-in-week.const'; import { DayOfWeek } from '../enums/day-of-week.enum'; import { getWeekdayRelativeToNewWeekStart } from './get-weekday-relative-to-new-week-start.function'; export function getWeeksCountInMonth(yearNumber, monthNumber, startWeekday) { const monthIndex = monthNumber - 1; const startDate = new Date(yearNumber, monthIndex, 1); const endDate = new Date(yearNumber, monthIndex + 1, 0); const startMonthWeekday = getWeekdayRelativeToNewWeekStart(startDate.getDay(), DayOfWeek.Sunday, startWeekday); const daysInMonth = endDate.getDate() - startDate.getDate() + 1; const wholeWeeksCount = Math.floor(daysInMonth / DAYS_IN_WEEK); const daysAtFirstPartialWeek = DAYS_IN_WEEK - startMonthWeekday; if (!isPartialWeek(daysAtFirstPartialWeek)) { const daysAtLastPartialWeek = daysInMonth % DAYS_IN_WEEK; return wholeWeeksCount + (isPartialWeek(daysAtLastPartialWeek) ? 1 : 0); } const daysAtLastPartialWeek = (daysInMonth % DAYS_IN_WEEK) - daysAtFirstPartialWeek; return wholeWeeksCount + 1 + (isPartialWeek(daysAtLastPartialWeek) ? 1 : 0); } function isPartialWeek(daysCount) { return daysCount > 0 && daysCount < DAYS_IN_WEEK; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXdlZWtzLWNvdW50LWluLW1vbnRoLmZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RlY2xhcmF0aW9ucy9mdW5jdGlvbnMvZ2V0LXdlZWtzLWNvdW50LWluLW1vbnRoLmZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFckcsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFVBQWtCLEVBQUUsV0FBbUIsRUFBRSxZQUF1QjtJQUNuRyxNQUFNLFVBQVUsR0FBVyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBRTNDLE1BQU0sU0FBUyxHQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUQsTUFBTSxPQUFPLEdBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFOUQsTUFBTSxpQkFBaUIsR0FBYyxnQ0FBZ0MsQ0FDbkUsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUNsQixTQUFTLENBQUMsTUFBTSxFQUNoQixZQUFZLENBQ2IsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFXLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXhFLE1BQU0sZUFBZSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBRXZFLE1BQU0sc0JBQXNCLEdBQVcsWUFBWSxHQUFHLGlCQUFpQixDQUFDO0lBRXhFLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsRUFBRTtRQUMxQyxNQUFNLHFCQUFxQixHQUFXLFdBQVcsR0FBRyxZQUFZLENBQUM7UUFFakUsT0FBTyxlQUFlLEdBQUcsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6RTtJQUVELE1BQU0scUJBQXFCLEdBQVcsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsc0JBQXNCLENBQUM7SUFFNUYsT0FBTyxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLFNBQWlCO0lBQ3RDLE9BQU8sU0FBUyxHQUFHLENBQUMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEQVlTX0lOX1dFRUsgfSBmcm9tICcuLi9jb25zdGFudHMvZGF5cy1pbi13ZWVrLmNvbnN0JztcbmltcG9ydCB7IERheU9mV2VlayB9IGZyb20gJy4uL2VudW1zL2RheS1vZi13ZWVrLmVudW0nO1xuaW1wb3J0IHsgZ2V0V2Vla2RheVJlbGF0aXZlVG9OZXdXZWVrU3RhcnQgfSBmcm9tICcuL2dldC13ZWVrZGF5LXJlbGF0aXZlLXRvLW5ldy13ZWVrLXN0YXJ0LmZ1bmN0aW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtzQ291bnRJbk1vbnRoKHllYXJOdW1iZXI6IG51bWJlciwgbW9udGhOdW1iZXI6IG51bWJlciwgc3RhcnRXZWVrZGF5OiBEYXlPZldlZWspOiBudW1iZXIge1xuICBjb25zdCBtb250aEluZGV4OiBudW1iZXIgPSBtb250aE51bWJlciAtIDE7XG5cbiAgY29uc3Qgc3RhcnREYXRlOiBEYXRlID0gbmV3IERhdGUoeWVhck51bWJlciwgbW9udGhJbmRleCwgMSk7XG4gIGNvbnN0IGVuZERhdGU6IERhdGUgPSBuZXcgRGF0ZSh5ZWFyTnVtYmVyLCBtb250aEluZGV4ICsgMSwgMCk7XG5cbiAgY29uc3Qgc3RhcnRNb250aFdlZWtkYXk6IERheU9mV2VlayA9IGdldFdlZWtkYXlSZWxhdGl2ZVRvTmV3V2Vla1N0YXJ0KFxuICAgIHN0YXJ0RGF0ZS5nZXREYXkoKSxcbiAgICBEYXlPZldlZWsuU3VuZGF5LFxuICAgIHN0YXJ0V2Vla2RheVxuICApO1xuXG4gIGNvbnN0IGRheXNJbk1vbnRoOiBudW1iZXIgPSBlbmREYXRlLmdldERhdGUoKSAtIHN0YXJ0RGF0ZS5nZXREYXRlKCkgKyAxO1xuXG4gIGNvbnN0IHdob2xlV2Vla3NDb3VudDogbnVtYmVyID0gTWF0aC5mbG9vcihkYXlzSW5Nb250aCAvIERBWVNfSU5fV0VFSyk7XG5cbiAgY29uc3QgZGF5c0F0Rmlyc3RQYXJ0aWFsV2VlazogbnVtYmVyID0gREFZU19JTl9XRUVLIC0gc3RhcnRNb250aFdlZWtkYXk7XG5cbiAgaWYgKCFpc1BhcnRpYWxXZWVrKGRheXNBdEZpcnN0UGFydGlhbFdlZWspKSB7XG4gICAgY29uc3QgZGF5c0F0TGFzdFBhcnRpYWxXZWVrOiBudW1iZXIgPSBkYXlzSW5Nb250aCAlIERBWVNfSU5fV0VFSztcblxuICAgIHJldHVybiB3aG9sZVdlZWtzQ291bnQgKyAoaXNQYXJ0aWFsV2VlayhkYXlzQXRMYXN0UGFydGlhbFdlZWspID8gMSA6IDApO1xuICB9XG5cbiAgY29uc3QgZGF5c0F0TGFzdFBhcnRpYWxXZWVrOiBudW1iZXIgPSAoZGF5c0luTW9udGggJSBEQVlTX0lOX1dFRUspIC0gZGF5c0F0Rmlyc3RQYXJ0aWFsV2VlaztcblxuICByZXR1cm4gd2hvbGVXZWVrc0NvdW50ICsgMSArIChpc1BhcnRpYWxXZWVrKGRheXNBdExhc3RQYXJ0aWFsV2VlaykgPyAxIDogMCk7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbFdlZWsoZGF5c0NvdW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGRheXNDb3VudCA+IDAgJiYgZGF5c0NvdW50IDwgREFZU19JTl9XRUVLO1xufVxuIl19