diff --git a/server/dateUtils.ts b/server/dateUtils.ts index f85f9e0..1487653 100644 --- a/server/dateUtils.ts +++ b/server/dateUtils.ts @@ -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())) { diff --git a/todo.md b/todo.md index 839f0cd..af4d990 100644 --- a/todo.md +++ b/todo.md @@ -103,7 +103,7 @@ - [x] Corriger le bug de modification des horaires des séquences -- [ ] Corriger la modification des heures d'une séquence (amélioration de la gestion d'erreurs en cours) +- [x] Corriger le décalage d'une heure lors de l'enregistrement des dates (15h00 saisi devient 16h00 en base) - [x] Corriger la mise à jour du nombre d'inscrits sur la page d'inscription publique - [x] Corriger le décalage d'une heure entre la saisie et l'affichage des dates de séquences