59 lines
1.7 KiB
JavaScript
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",
|
|
];
|