diff --git a/lib/calculate.ts b/lib/calculate.ts index dc0d905b0..8d8ce7005 100644 --- a/lib/calculate.ts +++ b/lib/calculate.ts @@ -557,8 +557,16 @@ export function chunkDaysIntoWeeks( if (!day.date || typeof day.date !== 'string' || day.date.trim() === '') return false; // Validate YYYY-MM-DD format if (!/^\d{4}-\d{2}-\d{2}$/.test(day.date)) return false; - // Ensure it's a valid date - const dateObj = new Date(day.date); + // Validate date components (reject impossible dates like 2024-02-30) + const parts = day.date.match(/^(\d{4})-(\d{2})-(\d{2})$/); + if (!parts) return false; + const year = parseInt(parts[1], 10); + const month = parseInt(parts[2], 10); + const dayNum = parseInt(parts[3], 10); + if (month < 1 || month > 12) return false; + const daysInMonth = new Date(year, month, 0).getDate(); + if (dayNum < 1 || dayNum > daysInMonth) return false; + const dateObj = new Date(year, month - 1, dayNum); return !isNaN(dateObj.getTime()); });