Files
malio-layer-ui/app/components/malio/date/composables/datetimeFormat.ts
T
tristan fee894e895 feat(ui) : MalioDate/DateTime exposent update:valid + saisie clavier DateTime (#MUI-43)
- MalioDate : event update:valid (malforme/hors-plage => false), emis au montage
- MalioDateTime : prop editable (saisie JJ/MM/AAAA HH:MM) + meme update:valid
- CalendarField : masque maska configurable via prop mask
- datetimeFormat : nouveau parseur parseDisplayToIsoDateTime
- fix test Date « Entree » (key 'Enter' reel vs trigger keydown.enter)
- doc COMPONENTS.md + CHANGELOG.md + champ editable dans le playground

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 16:03:04 +02:00

44 lines
1.4 KiB
TypeScript

import {isValidIso, parseDisplayToIso} from './dateFormat'
const DATETIME_RE = /^(\d{4}-\d{2}-\d{2})T(\d{2}):(\d{2}):(\d{2})$/
export function isValidIsoDateTime(s: string): boolean {
const m = DATETIME_RE.exec(s)
if (!m) return false
const [, date, hh, mm, ss] = m
if (!isValidIso(date)) return false
const h = Number(hh)
const min = Number(mm)
const sec = Number(ss)
return h >= 0 && h <= 23 && min >= 0 && min <= 59 && sec >= 0 && sec <= 59
}
export function formatIsoDateTimeToDisplay(s: string | null): string {
if (!s || !isValidIsoDateTime(s)) return ''
const [date, time] = s.split('T')
const [y, mo, d] = date.split('-')
const [hh, mm] = time.split(':')
return `${d}/${mo}/${y} ${hh}:${mm}`
}
export function splitDateTime(s: string | null): {date: string | null; time: string} {
if (!s || !isValidIsoDateTime(s)) return {date: null, time: ''}
const [date, time] = s.split('T')
return {date, time: time.slice(0, 5)}
}
export function parseDisplayToIsoDateTime(display: string): string | null {
const match = /^(\d{2}\/\d{2}\/\d{4}) (\d{2}):(\d{2})$/.exec(display.trim())
if (!match) return null
const [, datePart, hh, mm] = match
const iso = parseDisplayToIso(datePart)
if (!iso) return null
if (Number(hh) > 23 || Number(mm) > 59) return null
return `${iso}T${hh}:${mm}:00`
}
export function composeDateTime(date: string, time: string): string {
const t = time || '00:00'
return `${date}T${t}:00`
}