UNPKG

@technobuddha/library

Version:
29 lines (28 loc) 1.25 kB
import { ticksPerWeek, month, day } from '../constants'; import floor from '../floor'; import getBeginningOfWeek from '../getBeginningOfWeek'; import getISOWeeksInYear from '../getISOWeeksInYear'; /** * Determine the ISO week number for a given date * * @param input The date * @param __namedParameteres see {@link Options} * @default weekOneIncludes Thursday * @default firstDayOfWeek Monday * @returns the week number (1-53) */ export function getISOWeekOfYear(input, { UTC = false, weekOneIncludes = day.thursday, firstDayOfWeek = day.monday } = {}) { const bow = getBeginningOfWeek(input, { UTC, firstDayOfWeek }); const week1 = UTC ? getBeginningOfWeek(new Date(Date.UTC(bow.getUTCFullYear(), month.january, weekOneIncludes)), { UTC, firstDayOfWeek }) : getBeginningOfWeek(new Date(bow.getFullYear(), month.january, weekOneIncludes), { UTC, firstDayOfWeek }); let week = 1 + floor((bow.getTime() - week1.getTime()) / ticksPerWeek, { tolerance: 0.05 }); let year = UTC ? bow.getUTCFullYear() : bow.getFullYear(); const weeks = getISOWeeksInYear(year, { UTC, weekOneIncludes }); if (week > weeks) { year += 1; week = 1; } return { year, week }; } export default getISOWeekOfYear;