vital-core / src /lib /week.js
vital-core sync
Deploy snapshot for Hugging Face Spaces
50841a0
Raw
History Blame Contribute Delete
1.13 kB
/**
* All run grouping uses ISO 8601 weeks (e.g. "2026-W24").
* The week can be overridden with VITAL_WEEK for deterministic tests.
*/
export function isoWeek(date = new Date()) {
if (process.env.VITAL_WEEK) return process.env.VITAL_WEEK;
return isoWeekOf(date);
}
export function isoWeekOf(date) {
const d = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
// Thursday of the current week determines the ISO year.
d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
const week = Math.ceil(((d - yearStart) / 86400000 + 1) / 7);
return `${d.getUTCFullYear()}-W${String(week).padStart(2, '0')}`;
}
/** Sort key: "2026-W09" < "2026-W24" lexicographically already, but be explicit. */
export function compareWeeks(a, b) {
return a.localeCompare(b);
}
export function previousWeekOf(weekStr, weeks) {
// Given a sorted list of known weeks, return the one immediately before weekStr.
const sorted = [...weeks].sort(compareWeeks);
const i = sorted.indexOf(weekStr);
return i > 0 ? sorted[i - 1] : null;
}