Checkpoint: Correction du décalage d'une heure entre la saisie et l'affichage des dates de séquences. Création d'un module dateUtils.ts avec des fonctions parseLocalDateTime et formatToLocalDateTime pour gérer correctement les conversions entre heure locale et UTC. Toutes les procédures de création et mise à jour de séquences utilisent maintenant ces fonctions pour préserver l'heure locale saisie par l'utilisateur.

This commit is contained in:
Manus Sandbox
2025-11-12 11:35:01 -05:00
parent d198d4ce3f
commit 7135a9d2c6
3 changed files with 42 additions and 6 deletions

33
server/dateUtils.ts Normal file
View File

@@ -0,0 +1,33 @@
/**
* Utilitaires pour la gestion des dates
* Gère correctement les conversions entre heure locale et UTC
*/
/**
* Convertit une chaîne datetime-local (format: "2025-01-15T14:30") en Date
* en préservant l'heure locale (pas de conversion UTC)
*/
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;
// Créer la date en heure locale
const date = new Date(normalized);
return date;
}
/**
* Formate une Date en chaîne datetime-local pour les inputs HTML
* Format: "YYYY-MM-DDTHH:mm"
*/
export function formatToLocalDateTime(date: Date): string {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day}T${hours}:${minutes}`;
}

View File

@@ -2,6 +2,7 @@ import { COOKIE_NAME } from "@shared/const";
import { getSessionCookieOptions } from "./_core/cookies"; import { getSessionCookieOptions } from "./_core/cookies";
import { systemRouter } from "./_core/systemRouter"; import { systemRouter } from "./_core/systemRouter";
import { publicProcedure, protectedProcedure, router } from "./_core/trpc"; import { publicProcedure, protectedProcedure, router } from "./_core/trpc";
import { parseLocalDateTime } from "./dateUtils";
import { z } from "zod"; import { z } from "zod";
import * as db from "./db"; import * as db from "./db";
import { TRPCError } from "@trpc/server"; import { TRPCError } from "@trpc/server";
@@ -167,7 +168,7 @@ export const appRouter = router({
// Créer la séquence // Créer la séquence
const result = await db.createSequence({ const result = await db.createSequence({
...sequenceData, ...sequenceData,
dateBlocage: new Date(sequenceData.dateBlocage), dateBlocage: parseLocalDateTime(sequenceData.dateBlocage),
}); });
// Récupérer l'ID de la séquence créée // Récupérer l'ID de la séquence créée
@@ -177,8 +178,8 @@ export const appRouter = router({
for (const date of dates) { for (const date of dates) {
await db.createDateFormation({ await db.createDateFormation({
sequenceId, sequenceId,
dateDebut: new Date(date.dateDebut), dateDebut: parseLocalDateTime(date.dateDebut),
dateFin: new Date(date.dateFin), dateFin: parseLocalDateTime(date.dateFin),
ordre: date.ordre, ordre: date.ordre,
}); });
} }
@@ -207,7 +208,7 @@ export const appRouter = router({
// Mettre à jour la séquence // Mettre à jour la séquence
const updateData: any = { const updateData: any = {
...sequenceData, ...sequenceData,
dateBlocage: new Date(sequenceData.dateBlocage), dateBlocage: parseLocalDateTime(sequenceData.dateBlocage),
}; };
console.log('[UPDATE SEQUENCE] UpdateData:', JSON.stringify(updateData, null, 2)); console.log('[UPDATE SEQUENCE] UpdateData:', JSON.stringify(updateData, null, 2));
@@ -220,8 +221,8 @@ export const appRouter = router({
for (const date of dates) { for (const date of dates) {
await db.createDateFormation({ await db.createDateFormation({
sequenceId: id, sequenceId: id,
dateDebut: new Date(date.dateDebut), dateDebut: parseLocalDateTime(date.dateDebut),
dateFin: new Date(date.dateFin), dateFin: parseLocalDateTime(date.dateFin),
ordre: date.ordre, ordre: date.ordre,
}); });
} }

View File

@@ -105,3 +105,5 @@
- [ ] Corriger la modification des heures d'une séquence (toujours non fonctionnelle) - [ ] Corriger la modification des heures d'une séquence (toujours non fonctionnelle)
- [x] Corriger la mise à jour du nombre d'inscrits sur la page d'inscription publique - [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