export function todayDateStr() { return new Date().toISOString().slice(0, 10); } export function nowUnix() { return Math.floor(Date.now() / 1000); } export function getIsoWeekStr(dateInput) { // Parse input to ensure we work with a Date object // If dateInput is YYYY-MM-DD string, new Date() treats it as UTC. const d = dateInput ? new Date(dateInput) : new Date(); // If valid date, use UTC components to avoid local timezone issues if (isNaN(d.getTime())) return ''; // Copy date so we don't mutate the original if passed by reference (though new Date() handles that) const date = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate())); // ISO week date system: Thursday determines the year // day: 0 (Sun) -> 6 (Sat). We want 1 (Mon) -> 7 (Sun) const day = date.getUTCDay() || 7; date.setUTCDate(date.getUTCDate() + 4 - day); const yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1)); const weekNo = Math.ceil((((date - yearStart) / 86400000) + 1) / 7); return `${date.getUTCFullYear()}-W${String(weekNo).padStart(2, '0')}`; }