@bimeister/pupakit.calendar
Version:
PupaKit Calendar
22 lines • 4.95 kB
JavaScript
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