/** * German date formatting for the SIS pages (dd.MM.yyyy HH:mm). Accepts ISO strings, Date * objects, epoch numbers and Amazon's report format "dd/mm/yyyy HH:mm:ss MET". */ const parseAny = (v: any): Date | null => { if (v == null || v === '') return null if (v instanceof Date) return Number.isNaN(v.getTime()) ? null : v if (typeof v === 'number') return new Date(v) const s = String(v).trim() const eu = s.match(/^(\d{2})\/(\d{2})\/(\d{4})(?:[ T](\d{2}):(\d{2})(?::(\d{2}))?)?/) if (eu) { let [, a, b, y, h, mi, se] = eu if (Number(b) > 12 && Number(a) <= 12) [a, b] = [b, a] return new Date(Number(y), Number(b) - 1, Number(a), Number(h || 0), Number(mi || 0), Number(se || 0)) } const d = new Date(s) return Number.isNaN(d.getTime()) ? null : d } export const fmtDateTimeDe = (v: any): string => { const d = parseAny(v) return d ? d.toLocaleString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }) : '' } export const fmtDateDe = (v: any): string => { const d = parseAny(v) return d ? d.toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' }) : '' } export const fmtTimeDe = (v: any): string => { const d = parseAny(v) return d ? d.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit', second: '2-digit' }) : '' }