8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'essaie de rendre dynamique une petite section de mon site où l'on indique les congés fériés.

Certaine dates sont fixe, pas de problème
D'autres sont variable, comme le congé de Pâque.

Au Québec, nous avons aussi la Journée nationale des patriotes, qui est le 25 mai... ou le lundi précédant le 25 mai....
Je n'arrive pas à faire la bonne sélection pour ce congé, voici ce que j'ai jusqu'à maintenant:
// Journée nationale des patriotes
if (mktime(0, 0, 0, 5, 25, $year)){
  $holidays[] = mktime(0, 0, 0, 5, 25, $year);
}
else {
  // le lundi qui précède le 25 mai
  $holidays[] = strtotime('first monday before', mktime(0, 0, 0, 5, 25,  $year));
}

donc, en 2015, ça devrait donné le 18 mai, mais le code me donne toujours le 25 mai.


je me suis basé sur le modèle de la Fête du travail, qui est le premier lundi du mois de septembre:
// Fête du travail
// 1er lundi de septembre
if (mktime(0, 0, 0, 9, 1, $year)){
  $holidays[] = strtotime("first monday", mktime(0, 0, 0, 9, 1, $year));
}

Modifié par juliesunset (21 Dec 2015 - 20:44)
Trouvé!
En fait, une petite erreur... la Journée des patriotes est toujours le lundi précédant le 25, même si le 25 tombe un lundi, comme cette année.

Donc, j'ai trouvé la solution:
// Journée nationale des patriotes
// le lundi qui précède le 25 mai
if (date('w', mktime(0, 0, 0, 5, 25, $year)) == 1) { // si le 25 mai est un lundi
  $holidays[] = strtotime('-7 days', mktime(0, 0, 0, 5, 25, $year));
}
elseif (date('w', mktime(0, 0, 0, 5, 25, $year)) != 1) {
  $holidays[] = strtotime('last monday', mktime(0, 0, 0, 5, 25, $year));
}


au passage, une petite correction pour la Fête du travail, pas de "if"
// Fête du travail
// 1er lundi de septembre
$holidays[] = strtotime("first monday", mktime(0, 0, 0, 9, 1, $year));

Modifié par juliesunset (21 Dec 2015 - 20:44)