@technobuddha/library
Version: 
A large library of useful functions
35 lines • 3.14 kB
JavaScript
import { beginningOfWeek } from "./beginning-of-week.js";
import { day, month, ticksPerWeek } from "./date.js";
import { floor } from "./floor.js";
import { isoWeeksInYear } from "./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 isoWeekOfYear(input, { utc = false, weekOneIncludes = day.thursday, firstDayOfWeek = day.monday, } = {}) {
    const bow = beginningOfWeek(input, { utc, firstDayOfWeek });
    const week1 = utc ?
        beginningOfWeek(new Date(Date.UTC(bow.getUTCFullYear(), month.january, weekOneIncludes)), {
            utc,
            firstDayOfWeek,
        })
        : beginningOfWeek(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 = isoWeeksInYear(year, { utc, weekOneIncludes });
    if (week > weeks) {
        year += 1;
        week = 1;
    }
    return { year, week };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvLXdlZWstb2YteWVhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pc28td2Vlay1vZi15ZWFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsR0FBRyxFQUFrQixLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBZ0J4RDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixLQUFXLEVBQ1gsRUFDRSxHQUFHLEdBQUcsS0FBSyxFQUNYLGVBQWUsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUM5QixjQUFjLEdBQUcsR0FBRyxDQUFDLE1BQU0sTUFDSCxFQUFFO0lBTzVCLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUU1RCxNQUFNLEtBQUssR0FDVCxHQUFHLENBQUMsQ0FBQztRQUNILGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDLEVBQUU7WUFDeEYsR0FBRztZQUNILGNBQWM7U0FDZixDQUFDO1FBQ0osQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsRUFBRTtZQUMzRSxHQUFHO1lBQ0gsY0FBYztTQUNmLENBQUMsQ0FBQztJQUVQLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUYsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFFN0QsSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNWLElBQUksR0FBRyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QixDQUFDIn0=