- Renommage questionnaire.nom → questionnaire.titre dans QuestionnaireReponse.tsx, AdminQuestionnaireEdit.tsx, questionnaireScheduler.ts, questionnaireExport.ts - Correction des requêtes SQL dans questionnaireDb.ts (suppression de la condition complete inexistante) - Ajout des colonnes valeurMin et valeurMax dans la table questions - Renommage de la colonne nom en titre dans la table questionnaires
61 lines
1.9 KiB
TypeScript
61 lines
1.9 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 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): Date {
|
|
if (!dateTimeString) {
|
|
throw new Error('Date string is required');
|
|
}
|
|
|
|
// Le format datetime-local est "YYYY-MM-DDTHH:mm"
|
|
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 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;
|
|
}
|
|
|
|
/**
|
|
* 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}`;
|
|
}
|