Checkpoint: Correction définitive du décalage horaire lors de l'enregistrement des dates. La fonction parseLocalDateTime parse maintenant manuellement les composants de la date (année, mois, jour, heures, minutes) et construit un objet Date en utilisant le constructeur avec les valeurs locales, évitant ainsi toute conversion UTC automatique. L'heure saisie (ex: 15h00) est désormais correctement enregistrée en base sans décalage.

This commit is contained in:
Manus Sandbox
2025-11-12 12:27:03 -05:00
parent f266e8dde8
commit fedfcc59a4
2 changed files with 21 additions and 5 deletions

View File

@@ -6,6 +6,7 @@
/**
* Convertit une chaîne datetime-local (format: "2025-01-15T14:30") en Date
* en préservant l'heure locale (pas de conversion UTC)
* Retourne une Date construite manuellement pour éviter les conversions de fuseau horaire
*/
export function parseLocalDateTime(dateTimeString: string): Date {
if (!dateTimeString) {
@@ -13,11 +14,26 @@ export function parseLocalDateTime(dateTimeString: string): Date {
}
// Le format datetime-local est "YYYY-MM-DDTHH:mm"
// On ajoute ":00" pour les secondes si nécessaire
const normalized = dateTimeString.length === 16 ? `${dateTimeString}:00` : dateTimeString;
// Parser manuellement pour éviter les conversions UTC
const match = dateTimeString.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/);
// Créer la date en heure locale
const date = new Date(normalized);
if (!match) {
throw new Error(`Invalid date format: ${dateTimeString}. Expected YYYY-MM-DDTHH:mm`);
}
const [, year, month, day, hours, minutes] = match;
// Créer une Date en utilisant le constructeur avec les composants locaux
// Cela évite la conversion UTC automatique
const date = new Date(
parseInt(year),
parseInt(month) - 1, // Les mois commencent à 0 en JavaScript
parseInt(day),
parseInt(hours),
parseInt(minutes),
0, // secondes
0 // millisecondes
);
// Vérifier que la date est valide
if (isNaN(date.getTime())) {