@technobuddha/library
Version:
A large library of useful functions
36 lines • 3.21 kB
JavaScript
import { day, month, ticksPerWeek } from "./constants.js";
import { floor } from "./floor.js";
import { getBeginningOfWeek } from "./get-beginning-of-week.js";
import { getISOWeeksInYear } from "./get-iso-weeks-in-year.js";
/**
* Determine the ISO week number for a given date
*
* @param input - The date
* @param options - see {@link ISOWeekOfYearOptions}
* @defaultValue weekOneIncludes Thursday
* @defaultValue firstDayOfWeek Monday
* @returns the week number (1-53)
* @group Time
* @category Week
*/
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 };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWlzby13ZWVrLW9mLXllYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0LWlzby13ZWVrLW9mLXllYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQWdCL0Q7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsS0FBVyxFQUNYLEVBQ0UsR0FBRyxHQUFHLEtBQUssRUFDWCxlQUFlLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFDOUIsY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLE1BQ0gsRUFBRTtJQUU1QixNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUUvRCxNQUFNLEtBQUssR0FDVCxHQUFHLENBQUMsQ0FBQztRQUNILGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUMsRUFBRTtZQUMzRixHQUFHO1lBQ0gsY0FBYztTQUNmLENBQUM7UUFDSixDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLEVBQUU7WUFDOUUsR0FBRztZQUNILGNBQWM7U0FDZixDQUFDLENBQUM7SUFFUCxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVGLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUQsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFFaEUsSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNWLElBQUksR0FBRyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QixDQUFDIn0=