59 lines
1.8 KiB
TypeScript
59 lines
1.8 KiB
TypeScript
/**
|
|
* 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)
|
|
* Retourne une Date construite manuellement pour éviter les conversions de fuseau horaire
|
|
*/
|
|
export function parseLocalDateTime(dateTimeString: string): Date {
|
|
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) {
|
|
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())) {
|
|
throw new Error(`Invalid date string: ${dateTimeString}`);
|
|
}
|
|
|
|
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}`;
|
|
}
|