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