export function calculateHours(startTime, endTime) { if (!startTime || !endTime) return 0; if (endTime === "manual") return parseFloat(startTime) || 0; const parseTime = (timeStr) => { const parts = timeStr.split(":"); if (parts.length !== 2) return 0; return parseFloat(parts[0]) + parseFloat(parts[1]) / 60; }; const start = parseTime(startTime); const end = parseTime(endTime); if (end > start) return end - start; return 0; } export function getISOWeek(date) { 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 - yearStart) / 86400000 + 1) / 7); } export function getISOYear(date) { const d = new Date( Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()), ); const dayNum = d.getUTCDay() || 7; d.setUTCDate(d.getUTCDate() + 4 - dayNum); return d.getUTCFullYear(); } export function getDateOfISOWeek(w, y) { const simple = new Date(y, 0, 1 + (w - 1) * 7); const dow = simple.getDay(); const ISOweekStart = simple; if (dow <= 4) ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1); else ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay()); return ISOweekStart; } export function formatDate(date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, "0"); const day = String(date.getDate()).padStart(2, "0"); return `${year}-${month}-${day}`; } export const dayNames = [ "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", ];