Bonjour,
date('W') me retourne un numéro de semaine 01 alors que nous sommes en semaine 53!

Que faire s'il vous plaît?

Merci

6 réponses


Bonjour,

C'est le fonctionnement normal car selon la norme ISO 8601, le numéro de semaine (W) est calculé de la manière suivante :

1/ la semaine commence le lundi
2/ la semaine n°1 est celle qui contient le premier jeudi de l'année (ou le 4 janvier) → c'est le cas en ce moment (30/12/2024)
3/ si une date est dans les derniers jours de décembre mais ne fait pas partie d'une semaine complète pour cette année, elle sera comptée comme appartenant à la semaine 1 de l'année suivante

Après il doit être possible d'écrire du code pour forcer l'affichage de S53...

Hexa
Auteur

Merci pour ta réponse.

C'est ça que je ne trouve pas --> "Après il doit être possible d'écrire du code pour forcer l'affichage de S53..."

De rien tu peux essayer quelque chose comme cela :

// Récupérer la date (remplacer par la date souhaitée)
$date = new DateTime('2024-12-30');

// Récupérer le numéro de la semaine selon ISO
$week = $date->format('W');

// Vérifier si la date est proche de la fin de l'année et ajuster la semaine
if ($date->format('m') == '12' && $date->format('d') > 28) {
    $week = 53; // On force la semaine 53
}

// Afficher le numéro de la semaine
echo "Numéro de la semaine : " . $week;
Hexa
Auteur

Merci pour le code.
Mais je me demande si ce ne serait pas plus simple de basculer directement sur la semaine 1 de l'année suivante...
Qu'en penses-tu?

Oui, tout dépend de ce que tu veux faire de ce numéro de semaine, mais effectivement garder S1 permet de respecter l'ISO..

Hexa
Auteur

Oui, respecter l'iso me paraît important.
Reste à trouver quoi faire quand une semaine 53 se présente dans le calendrier alors qu'elle n'existe pas dans l'iso.
Afficher la semaine 01 de 2025 les 30-12-2024 et 31-12-2024 ne gène pas l'utilisation de ma page.
Le problème actuel est que la requête sql se fait avec semaine '1' et année en cours '2024'. Donc les données de 01-2024 s'affichent et, tu penses bien que, ce n'est pas ce que je veux.

Ton aide m'inspire pour trouver une solution applicable chaque fois que ce genre de cas arrive...
Merci!