- Introduced utility functions for workday calculations in `workday-utils.ts`, including `getPreviousWorkday`, `getNextWorkday`, `isWorkday`, and `getDayName`. - Updated `DailyService` and `DailyPageClient` to utilize `getPreviousWorkday` for accurate date handling instead of simple date subtraction.
83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
/**
|
|
* Utilitaires pour la gestion des jours de travail
|
|
* Logique : Lundi-Vendredi sont les jours de travail
|
|
*/
|
|
|
|
/**
|
|
* Calcule le jour de travail précédent selon la logique métier :
|
|
* - Lundi → Vendredi (au lieu de Dimanche)
|
|
* - Mardi-Vendredi → jour précédent
|
|
* - Samedi → Vendredi
|
|
* - Dimanche → Vendredi
|
|
*/
|
|
export function getPreviousWorkday(date: Date): Date {
|
|
const result = new Date(date);
|
|
result.setHours(0, 0, 0, 0);
|
|
|
|
const dayOfWeek = result.getDay(); // 0 = Dimanche, 1 = Lundi, ..., 6 = Samedi
|
|
|
|
switch (dayOfWeek) {
|
|
case 1: // Lundi → Vendredi précédent
|
|
result.setDate(result.getDate() - 3);
|
|
break;
|
|
case 0: // Dimanche → Vendredi précédent
|
|
result.setDate(result.getDate() - 2);
|
|
break;
|
|
case 6: // Samedi → Vendredi précédent
|
|
result.setDate(result.getDate() - 1);
|
|
break;
|
|
default: // Mardi-Vendredi → jour précédent
|
|
result.setDate(result.getDate() - 1);
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Calcule le jour de travail suivant selon la logique métier :
|
|
* - Vendredi → Lundi suivant
|
|
* - Samedi → Lundi suivant
|
|
* - Dimanche → Lundi suivant
|
|
* - Lundi-Jeudi → jour suivant
|
|
*/
|
|
export function getNextWorkday(date: Date): Date {
|
|
const result = new Date(date);
|
|
result.setHours(0, 0, 0, 0);
|
|
|
|
const dayOfWeek = result.getDay(); // 0 = Dimanche, 1 = Lundi, ..., 6 = Samedi
|
|
|
|
switch (dayOfWeek) {
|
|
case 5: // Vendredi → Lundi suivant
|
|
result.setDate(result.getDate() + 3);
|
|
break;
|
|
case 6: // Samedi → Lundi suivant
|
|
result.setDate(result.getDate() + 2);
|
|
break;
|
|
case 0: // Dimanche → Lundi suivant
|
|
result.setDate(result.getDate() + 1);
|
|
break;
|
|
default: // Lundi-Jeudi → jour suivant
|
|
result.setDate(result.getDate() + 1);
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Vérifie si une date est un jour de travail (Lundi-Vendredi)
|
|
*/
|
|
export function isWorkday(date: Date): boolean {
|
|
const dayOfWeek = date.getDay();
|
|
return dayOfWeek >= 1 && dayOfWeek <= 5; // Lundi (1) à Vendredi (5)
|
|
}
|
|
|
|
/**
|
|
* Retourne le nom du jour en français
|
|
*/
|
|
export function getDayName(date: Date): string {
|
|
const days = ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'];
|
|
return days[date.getDay()];
|
|
}
|