diff --git a/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx b/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx index 700db52..9d460d3 100644 --- a/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx +++ b/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx @@ -62,21 +62,35 @@ const formatIsoDate = (d: Date): string => { return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}` } -const formatIsoDateTime = (d: Date, time: string = '00:00'): string => - `${formatIsoDate(d)}T${time}:00Z` +const localTzOffset = (d: Date): string => { + const pad = (n: number) => String(n).padStart(2, '0') + const total = -d.getTimezoneOffset() + const sign = total >= 0 ? '+' : '-' + const abs = Math.abs(total) + return `${sign}${pad(Math.floor(abs / 60))}:${pad(abs % 60)}` +} + +const formatIsoDateTime = (d: Date, time: string = '00:00'): string => { + const pad = (n: number) => String(n).padStart(2, '0') + const [hh, mm] = time.split(':').map(Number) + const local = new Date(d.getFullYear(), d.getMonth(), d.getDate(), hh || 0, mm || 0, 0) + return `${formatIsoDate(local)}T${pad(local.getHours())}:${pad(local.getMinutes())}:00${localTzOffset(local)}` +} const extractTime = (s: string | undefined, fallback: string): string => { if (!s) return fallback - const m = /T(\d{2}):(\d{2})/.exec(s) - return m ? `${m[1]}:${m[2]}` : fallback + const d = new Date(s) + if (Number.isNaN(d.getTime())) return fallback + const pad = (n: number) => String(n).padStart(2, '0') + return `${pad(d.getHours())}:${pad(d.getMinutes())}` } const combineDateTime = ( d: Date | null, time: string, - current: string, + _current: string, ): string => { - if (!d) return current + if (!d) return '' const safeTime = /^\d{2}:\d{2}$/.test(time) ? time : '00:00' return formatIsoDateTime(d, safeTime) }