school-timetracker/frontend/src/lib/utils.js
2026-01-16 11:25:34 +01:00

59 lines
1.7 KiB
JavaScript

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",
];