diff --git a/public/js/format-hours.js b/public/js/format-hours.js
index 31d73b9..0cf7823 100644
--- a/public/js/format-hours.js
+++ b/public/js/format-hours.js
@@ -15,5 +15,65 @@
var prefix = sign < 0 ? '-' : '';
return prefix + h + 'h ' + min + 'min';
}
+
+ /** Dezimalstunden in h:mm (z. B. 1.5 -> "1:30", -0.75 -> "-0:45") */
+ function decimalHoursToHhMm(decimalHours) {
+ if (decimalHours == null || !Number.isFinite(Number(decimalHours))) return '0:00';
+ var n = Number(decimalHours);
+ var sign = n < 0 ? -1 : 1;
+ var absVal = Math.abs(n);
+ var h = Math.floor(absVal);
+ var min = Math.round((absVal - h) * 60);
+ if (min >= 60) {
+ h += 1;
+ min = 0;
+ }
+ var prefix = sign < 0 ? '-' : '';
+ return prefix + h + ':' + String(min).padStart(2, '0');
+ }
+
+ /**
+ * Parst h:mm oder Xh Ymin zu Dezimalstunden.
+ * Beispiele: "1:30" -> 1.5, "-0:45" -> -0.75, "1h 30min" -> 1.5.
+ * @returns {number|null} Dezimalstunden oder null bei ungültiger Eingabe
+ */
+ function parseHoursMin(str) {
+ if (str == null) return null;
+ var s = String(str).trim();
+ if (s === '') return 0;
+ var sign = 1;
+ if (s.charAt(0) === '-') {
+ sign = -1;
+ s = s.slice(1).trim();
+ } else if (s.charAt(0) === '+') {
+ s = s.slice(1).trim();
+ }
+ // h:mm oder h:mm:ss
+ var colonMatch = s.match(/^(\d+):(\d{1,2})(?::(\d{1,2}))?$/);
+ if (colonMatch) {
+ var hours = parseInt(colonMatch[1], 10);
+ var minutes = parseInt(colonMatch[2], 10);
+ if (minutes >= 60) return null;
+ var sec = colonMatch[3] != null ? parseInt(colonMatch[3], 10) : 0;
+ if (sec >= 60) return null;
+ var decimal = hours + minutes / 60 + sec / 3600;
+ return sign * decimal;
+ }
+ // Xh Ymin (optional Leerzeichen)
+ var hmMatch = s.match(/^(\d+)\s*h\s*(\d{1,2})?\s*min$/i);
+ if (hmMatch) {
+ var h = parseInt(hmMatch[1], 10);
+ var m = (hmMatch[2] != null) ? parseInt(hmMatch[2], 10) : 0;
+ if (m >= 60) return null;
+ return sign * (h + m / 60);
+ }
+ // Nur Zahl (Dezimalstunden) zulassen als Fallback
+ var num = parseFloat(s.replace(',', '.'));
+ if (!Number.isFinite(num)) return null;
+ return sign * num;
+ }
+
window.formatHoursMin = formatHoursMin;
+ window.decimalHoursToHhMm = decimalHoursToHhMm;
+ window.parseHoursMin = parseHoursMin;
})();
diff --git a/views/verwaltung.ejs b/views/verwaltung.ejs
index 8790ca2..3ee1559 100644
--- a/views/verwaltung.ejs
+++ b/views/verwaltung.ejs
@@ -99,13 +99,13 @@
Überstunden-Korrektur:
+ value="0:00"
+ placeholder="z. B. 1:30, 10:30 oder -0:45"
+ style="width: 110px; padding: 4px 6px; border: 1px solid #ddd; border-radius: 4px;"
+ title="Korrektur in h:mm (z. B. 1:30, 10:30 oder -0:45). Nach dem Speichern wird das Feld auf 0:00 gesetzt." />