Files
Starseed/frontend/shared/utils/date.ts
T
tristan d5d7d2e2aa fix(front) : pesée horodatée en date+heure, ré-horodatée à la validation (ERP-189)
Le champ Date des blocs de pesée passe de MalioDate (date seule, heure perdue
-> 00:00:00 en base) à MalioDateTime (date + heure). Défaut = instant courant
(nowIsoDateTime) et ré-horodatage à la validation d'une pesée (bascule ou
manuelle) via applyReading : la date du ticket reflète le moment réel de la
pesée. L'hydratation en modification conserve l'heure du back (TIMESTAMP).
2026-06-24 10:15:57 +02:00

33 lines
1.2 KiB
TypeScript

/**
* Helpers de date purs / testables (partages inter-modules).
*/
/**
* Date du jour au format ISO `YYYY-MM-DD` en heure LOCALE.
*
* On NE passe PAS par `toISOString()` (UTC) : pres de minuit, le decalage de
* fuseau (FR = UTC+1/+2) renverrait la veille ou le lendemain. On lit donc les
* composantes locales. Parametre `now` injectable pour les tests.
*/
export function todayIso(now: Date = new Date()): string {
const year = now.getFullYear()
const month = String(now.getMonth() + 1).padStart(2, '0')
const day = String(now.getDate()).padStart(2, '0')
return `${year}-${month}-${day}`
}
/**
* Date-heure courante au format ISO LOCAL `YYYY-MM-DDTHH:mm:ss` (sans fuseau).
*
* C'est le format attendu par `MalioDateTime` (secondes incluses, pas d'offset
* horaire). Comme `todayIso`, on lit les composantes LOCALES (jamais
* `toISOString()`/UTC) pour ne pas décaler l'heure réelle. Paramètre `now`
* injectable pour les tests.
*/
export function nowIsoDateTime(now: Date = new Date()): string {
const hours = String(now.getHours()).padStart(2, '0')
const minutes = String(now.getMinutes()).padStart(2, '0')
const seconds = String(now.getSeconds()).padStart(2, '0')
return `${todayIso(now)}T${hours}:${minutes}:${seconds}`
}