Bonjour, en faisant des tests je fais le même constat: pour certaines années cette fonction renvoie 01. Je ne connais pas la cause mais tu peux faire ceci à la place:
je n'ai pas de solution sous la main pour l'instant mais, Asmitta, ton code ne me semble pas marcher… Il renvoie 53 pour 2024 alors qu'il n'y a que 52 semaines.
Le problème, de ce que je comprends, c'est que le 31 décembre n'est pas forcément dans la dernière semaine d'une année. Il peut être dans la première semaine de l'année d'après… Voilà ce que dit Wikipédia sur le calcul de la semaine 53 : cas de figure de la semaine 53.
Pas d'aide concernant le code par MP, le forum est là pour ça :)
> If 31 December is on a Monday, Tuesday, or Wednesday it is in W01 of the next year. If it is on a Thursday, it is in W53 of the year just ending. If on a Friday it is in W52 of the year just ending in common years and W53 in leap years. If on a Saturday or Sunday, it is in W52 of the year just ending.
Effectivement le code fourni par Asmitta ne fonctionne pas.
Merci à Julp pour l'explication théorique, mais il faut aussi tenir compte des années bissextiles autrement il peut y avoir une erreur.
votre code, Julp, ne donne pas le bon résultat pour toutes les années. exemple il donne 53 semaines pour 2030 alors qu'il y a 52 semaines .
j'ai fait une petite fonction pour prendre en compte le fonctionnement théorique.
public static function NB_semaines_an($annee_entree)
{
$annee_entree =(INT)$annee_entree;
// on recherche le 1er jour de l'année
$premier_jour = Date('l',mktime(0, 0, 0, 01, 01, $annee_entree));
// On recherche si l'année est bissextile
$bissextile = Date('L',mktime(0, 0, 0, 01, 01, $annee_entree)); // 1 bissextile 0 non
$Nb_semaines_an = ($premier_jour =='Thursday' or ($premier_jour =='Wednesday' and $bissextile ==1)) ?53 :52;
return $Nb_semaines_an;
}
Elle donne le bon résultat (testé jusqu'en 2050!)
Merci encore à vous tous pour votre aide.
Je clos le sujet car il est résolu.
Jean-Marc
- Edité par Jean-MarcEvrard 24 décembre 2024 à 15:46:35
nombre de semaines dans une année
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
Tu peux tester ici:
Pas d'aide concernant le code par MP, le forum est là pour ça :)
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli