Ich habe eine kleine HTML Website wo ich Arbeitszeiten (Start und Ende) eingeben kann die dann alle zusammengerechnet werden.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Arbeitszeiterfassung</title>
<style>
body { font-family: Arial, sans-serif; padding: 20px; }
input { margin: 5px; }
table { border-collapse: collapse; margin-top: 20px; width: 100%; }
th, td { border: 1px solid #ccc; padding: 8px; text-align: center; }
.total { font-weight: bold; margin-top: 20px; }
</style>
</head>
<body>
<h1>Arbeitszeiterfassung</h1>
<label>Startzeit:
<input type="time" id="startzeit">
</label>
<label>Endzeit:
<input type="time" id="endzeit">
</label>
<button onclick="zeitHinzufügen()">Hinzufügen</button>
<table id="zeittabelle">
<thead>
<tr>
<th>Startzeit</th>
<th>Endzeit</th>
<th>Dauer</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<div class="total" id="gesamtzeit">Gesamtzeit: 0 Stunden 0 Minuten</div>
<script>
let zeitblöcke = [];
function parseTimeToDate(timeStr) {
return new Date("1970-01-01T" + timeStr + ":00");
}
function berechneDauer(start, ende) {
return (ende - start) / (1000 * 60); // in Minuten
}
function zeitHinzufügen() {
const startStr = document.getElementById('startzeit').value;
const endeStr = document.getElementById('endzeit').value;
if (!startStr || !endeStr) return alert("Bitte Start- und Endzeit eingeben.");
const start = parseTimeToDate(startStr);
const ende = parseTimeToDate(endeStr);
if (ende <= start) return alert("Endzeit muss nach der Startzeit liegen.");
// Block speichern
zeitblöcke.push({ start, ende });
// Neue Zeile hinzufügen
const diffMin = berechneDauer(start, ende);
const stunden = Math.floor(diffMin / 60);
const minuten = Math.floor(diffMin % 60);
const tabelle = document.getElementById("zeittabelle").getElementsByTagName("tbody")[0];
const zeile = tabelle.insertRow();
zeile.insertCell(0).textContent = startStr;
zeile.insertCell(1).textContent = endeStr;
zeile.insertCell(2).textContent = `${stunden}h ${minuten}min`;
zeitenNeuBerechnen();
// Eingabe leeren
document.getElementById('startzeit').value = '';
document.getElementById('endzeit').value = '';
}
function zeitenNeuBerechnen() {
if (zeitblöcke.length === 0) {
document.getElementById("gesamtzeit").textContent = `Gesamtzeit: 0 Stunden 0 Minuten`;
return;
}
// Alle Zeitblöcke nach Start sortieren
zeitblöcke.sort((a, b) => a.start - b.start);
let gesamtMinuten = 0;
let ausreichendPause = false;
for (let i = 0; i < zeitblöcke.length; i++) {
const block = zeitblöcke[i];
gesamtMinuten += berechneDauer(block.start, block.ende);
// Prüfe Pause zur vorherigen Zeit
if (i > 0) {
const pause = berechneDauer(zeitblöcke[i - 1].ende, block.start);
if (pause >= 30) {
ausreichendPause = true;
}
}
}
// Wenn mehr als 6 Stunden und keine ausreichende Pause → 30 Min abziehen
if (gesamtMinuten > 360 && !ausreichendPause) {
gesamtMinuten -= 30;
}
const gesamtStunden = Math.floor(gesamtMinuten / 60);
const gesamtRestMinuten = Math.floor(gesamtMinuten % 60);
document.getElementById("gesamtzeit").textContent = `Gesamtzeit: ${gesamtStunden} Stunden ${gesamtRestMinuten} Minuten` +
(gesamtMinuten < 360 && !ausreichendPause ? '' : (gesamtMinuten > 360 && !ausreichendPause ? ' (inkl. -30min Pause)' : ''));
}
</script>
</body>
</html>
W§enn ich länger als 6 Stunden am Stück arbeite wird automatisch eine Pause von 30 Minuten eingetragen, auch wenn ich z.B nur 10 Minuten weg war. Wie kann ich die 30 Minuten Pause hier automatisch mit einbeziehen? Wenn ich also 2 Einträge mache wo dazweischen 15 Minuten sind, soll die Zeit automatisch so berechnet werden dass die 30 Minuten mit einbezogen werden. Wie kann ich das umsetzen?