/** * Get ISO week number for a given date * ISO 8601 week numbering: week starts on Monday, first week contains Jan 4 */ export function getISOWeek(date: Date): number { const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())); const dayNum = d.getUTCDay() || 7; d.setUTCDate(d.getUTCDate() + 4 - dayNum); const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1)); return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7); } /** * Get week number and year for a given date * Returns format: "S06-2026" */ export function getWeekYearLabel(date: Date = new Date()): string { const week = getISOWeek(date); const year = date.getFullYear(); return `S${week.toString().padStart(2, '0')}-${year}`; }