Checkpoint: Correction finale du décalage horaire : parseLocalDateTime compense maintenant automatiquement le décalage UTC en utilisant getTimezoneOffset(). Cela garantit que l'heure saisie (par exemple 09:48) est stockée en UTC de manière à être affichée correctement en heure locale. Le paramètre timezone a été retiré de la connexion MySQL pour éviter les doubles conversions.

This commit is contained in:
Manus Sandbox
2025-11-13 10:24:37 -05:00
parent 7e0e9d0586
commit 4152b88c91
4 changed files with 34 additions and 20 deletions

View File

@@ -4,11 +4,11 @@
*/
/**
* 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
* Convertit une chaîne datetime-local (format: "2025-01-15T14:30") en Date
* en construisant la date avec une chaîne ISO qui force l'heure locale
* Préserve l'heure locale sans conversion UTC
*/
export function parseLocalDateTime(dateTimeString: string): string {
export function parseLocalDateTime(dateTimeString: string): Date {
if (!dateTimeString) {
throw new Error('Date string is required');
}
@@ -22,9 +22,27 @@ export function parseLocalDateTime(dateTimeString: string): string {
const [, year, month, day, hours, minutes] = match;
// 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`;
// Créer un objet Date en utilisant le constructeur avec composants
// MySQL stocke en UTC, donc on doit compenser le décalage horaire
const date = new Date(
parseInt(year),
parseInt(month) - 1,
parseInt(day),
parseInt(hours),
parseInt(minutes),
0
);
// Compenser le décalage UTC en ajoutant le décalage du fuseau horaire
// Cela garantit que l'heure stockée en UTC correspond à l'heure locale saisie
const offset = date.getTimezoneOffset(); // en minutes (négatif pour Europe/Paris)
date.setMinutes(date.getMinutes() - offset);
if (isNaN(date.getTime())) {
throw new Error(`Invalid date string: ${dateTimeString}`);
}
return date;
}
/**