date() changement d'année

Par SLK, il y a 9 ans


Bonjour,

J'ai un soucis avec le changement d'année (argh!)

J'ai un planning hebdomadaire sur lequel je fais plein de choses,
et j'ai BESOIN d'avoir

Depuis longtemps j'utilisais simplement ça :

$year = date('Y'); $week_num = date('W');

Au cours de l'année ça fonctionnait bien.

Mais aujourd'hui,
je suis en Nouvelle-Calédonie, le 01/01/2017, à 09h30 du matin,
et j'ai :

<?php $year == 2017 // ok $week_num == 52 // pas OK du tout. Du coup mon planning m'affiche des jours de fin d'année 2017, au lieu de début d'année 2017 // $week_num devrait être à 1, pas à 52 ?>

Je précise que tout mon système a besoin d'avoir ce numéro de la semaine,
je ne peux pas faire sans.

J'ai essayé de mettre

<?php date_default_timezone_set('Pacific/Noumea'); $year = date('Y'); $week_num = date('W'); ?>

Mais ça n'a pas changé.

J'étais sur qu'avec le timezone_set ça irai mais il semblerai que non,
du coup je ne vois pas comment m'en sortir.

Si vous avez une idée,
merci pour votre aide.

3 réponses

Carouge10, il y a 9 ans

Bonjour,
Non $week_num est correcte puisque la semaine n°1 est la première semaine entière de janvier.

Vous pouvez toujours forcer $week_num = 1 en testant si le mois en cours est égale à 1 et que le semaine en cours est 52.

if($week_num === 52 && date('n') === 1){ $week_num = 1; }
Huggy, il y a 9 ans

en France, les numéros de semaine suivent la norme iso-8601:1988
c-a-d que la semaine 1 c'est la première semaine d'au moins 4 jours situés dans la nouvelle année, et les semaines commencent un lundi contrairement aux anglo-saxons pour qui elles commencent un dimanche.
le dimanche 1 janvier 2017 fait donc partie de la dernière semaine de l'année 2016 (la semaine 52).

En php la fonction strftime propose les différents calculs

$week = strftime("%V"); // renvoie 52 $week = strftime("%U"); // renvoie 1
SLK, il y a 9 ans

Ah d'accord.

Eh bien super, ça me retire une épine du pied.
Merci beaucoup à vous 2 !

Et bonne année ;)