diff --git a/server/dateUtils.ts b/server/dateUtils.ts index 1487653..26661df 100644 --- a/server/dateUtils.ts +++ b/server/dateUtils.ts @@ -4,17 +4,16 @@ */ /** - * 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 + * Convertit une chaîne datetime-local (format: "2025-01-15T14:30") en chaîne MySQL + * Format de sortie: "YYYY-MM-DD HH:mm:ss" + * Préserve l'heure locale sans aucune conversion UTC */ -export function parseLocalDateTime(dateTimeString: string): Date { +export function parseLocalDateTime(dateTimeString: string): string { if (!dateTimeString) { throw new Error('Date string is required'); } // Le format datetime-local est "YYYY-MM-DDTHH:mm" - // Parser manuellement pour éviter les conversions UTC const match = dateTimeString.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/); if (!match) { @@ -23,24 +22,9 @@ export function parseLocalDateTime(dateTimeString: string): Date { 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())) { - throw new Error(`Invalid date string: ${dateTimeString}`); - } - - return date; + // Retourner directement au format MySQL sans passer par un objet Date + // Cela évite toute conversion de fuseau horaire + return `${year}-${month}-${day} ${hours}:${minutes}:00`; } /** diff --git a/server/routers.ts b/server/routers.ts index eb15e31..6761ff2 100644 --- a/server/routers.ts +++ b/server/routers.ts @@ -168,7 +168,7 @@ export const appRouter = router({ // Créer la séquence const result = await db.createSequence({ ...sequenceData, - dateBlocage: parseLocalDateTime(sequenceData.dateBlocage), + dateBlocage: parseLocalDateTime(sequenceData.dateBlocage) as any, }); // Récupérer l'ID de la séquence créée @@ -178,8 +178,8 @@ export const appRouter = router({ for (const date of dates) { await db.createDateFormation({ sequenceId, - dateDebut: parseLocalDateTime(date.dateDebut), - dateFin: parseLocalDateTime(date.dateFin), + dateDebut: parseLocalDateTime(date.dateDebut) as any, + dateFin: parseLocalDateTime(date.dateFin) as any, ordre: date.ordre, }); } @@ -208,7 +208,7 @@ export const appRouter = router({ // Mettre à jour la séquence const updateData: any = { ...sequenceData, - dateBlocage: parseLocalDateTime(sequenceData.dateBlocage), + dateBlocage: parseLocalDateTime(sequenceData.dateBlocage) as any, }; console.log('[UPDATE SEQUENCE] UpdateData:', JSON.stringify(updateData, null, 2)); @@ -224,8 +224,8 @@ export const appRouter = router({ console.log('[UPDATE SEQUENCE] Création date:', date); await db.createDateFormation({ sequenceId: id, - dateDebut: parseLocalDateTime(date.dateDebut), - dateFin: parseLocalDateTime(date.dateFin), + dateDebut: parseLocalDateTime(date.dateDebut) as any, + dateFin: parseLocalDateTime(date.dateFin) as any, ordre: date.ordre, }); } diff --git a/todo.md b/todo.md index 4bfb247..04593f6 100644 --- a/todo.md +++ b/todo.md @@ -113,3 +113,5 @@ - [x] Corriger les fonctions formatDate pour gérer les objets Date JavaScript en plus des chaînes MySQL - [x] Forcer le fuseau horaire Europe/Paris dans la connexion MySQL pour éliminer le décalage d'une heure + +- [x] Corriger le décalage horaire persistant dans parseLocalDateTime (09:48 envoyé devient 10:48 en base)