Checkpoint: Correction définitive du décalage horaire lors de l'enregistrement des dates. La fonction parseLocalDateTime parse maintenant manuellement les composants de la date (année, mois, jour, heures, minutes) et construit un objet Date en utilisant le constructeur avec les valeurs locales, évitant ainsi toute conversion UTC automatique. L'heure saisie (ex: 15h00) est désormais correctement enregistrée en base sans décalage.
This commit is contained in:
@@ -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())) {
|
||||
|
||||
Reference in New Issue
Block a user