@technobuddha/library
Version:
A large library of useful functions
20 lines (19 loc) • 975 B
JavaScript
import { daysPerWeek, month, day } from '../constants';
import { isNumber } from 'lodash';
import modulo from '../modulo';
/**
* Determine the number of ISO weeks within a year
*
* @param input A date within the year, or a year number
* @param __namedParameters see {@link Options}
* @default weekOneIncludes Thursday
* @return The number of weeks in the year (52 or 53)
*/
export function getISOWeeksInYear(input, { UTC = false, weekOneIncludes = day.thursday } = {}) {
const year = isNumber(input) ? input : UTC ? input.getUTCFullYear() : input.getFullYear();
const dow0 = UTC ? new Date(Date.UTC(year, month.january, 1)).getUTCDay() : new Date(year, month.january, 1).getDay();
const dow1 = UTC ? new Date(Date.UTC(year, month.december, 31)).getUTCDay() : new Date(year, month.december, 31).getDay();
const target = modulo(weekOneIncludes, daysPerWeek);
return (dow0 === target || dow1 === target) ? 53 : 52;
}
export default getISOWeeksInYear;