fix crawling + correct date/time format

This commit is contained in:
2026-10-07 16:01:15 +02:00
parent 9d8c2a0488
commit 25f323ff49
10 changed files with 183 additions and 65 deletions
+43
View File
@@ -57,8 +57,51 @@ var U = (() => {
const uid = () => Math.random().toString(36).slice(2, 10);
/* Swiss display: 01/09/2026, 13:30. Internally always ISO dates + HH:MM. */
const fmtDate = (iso) => (iso ? `${iso.slice(8, 10)}/${iso.slice(5, 7)}/${iso.slice(0, 4)}` : '');
// "1/9/2026", "01.09.2026", "01-09-26", "2026-09-01" -> "2026-09-01" (null if invalid)
const parseUserDate = (s) => {
s = String(s || '').trim();
let m, y, mo, d;
if ((m = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(s))) [, y, mo, d] = m;
else if ((m = /^(\d{1,2})[./-](\d{1,2})[./-](\d{4}|\d{2})$/.exec(s))) [, d, mo, y] = m;
else return null;
if (y.length === 2) y = '20' + y;
const dt = new Date(+y, +mo - 1, +d);
return dt.getMonth() === +mo - 1 && dt.getDate() === +d ? isoDate(dt) : null;
};
const fmtDateTime = (dt) => `${fmtDate(isoDate(dt))} ${fmtTime(dt.getHours() * 60 + dt.getMinutes())}`;
// "930", "9:30", "9.30", "9h30", "9" -> "09:30" (null if invalid)
const parseUserTime = (s) => {
s = String(s || '').trim();
let m;
if ((m = /^(\d{1,2})$/.exec(s))) m = [s, m[1], '0'];
else if (!(m = /^(\d{1,2})[:.h]?(\d{2})$/.exec(s))) return null;
const min = +m[1] * 60 + +m[2];
return +m[1] < 24 && +m[2] < 60 ? fmtTime(min) : null;
};
// Text inputs with data-kind="date" | "time": read/write ISO / HH:MM, show Swiss format
const getField = (el) => (el.dataset.kind === 'date' ? parseUserDate(el.value) : parseUserTime(el.value)) || '';
const setField = (el, v) => { el.value = el.dataset.kind === 'date' ? fmtDate(v) : v || ''; };
const setupFields = (root = document) => {
root.querySelectorAll('input[data-kind]').forEach((el) => {
el.placeholder ||= el.dataset.kind === 'date' ? 'dd/mm/yyyy' : 'hh:mm';
el.size = el.dataset.kind === 'date' ? 10 : 5;
el.addEventListener('blur', () => {
const v = getField(el);
el.classList.toggle('invalid', !!el.value.trim() && !v);
if (v) setField(el, v);
});
});
};
return {
pad, toMin, fmtTime, fmtDur, parseHours, parseDate, isoDate, addDays,
weekday, weekdayName, WEEKDAYS, monday, weeksBetween, kimaiDateTime, uid,
fmtDate, parseUserDate, fmtDateTime, parseUserTime, getField, setField, setupFields,
};
})();