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

  • l'année en cours
  • le numéro de la semaine en cours

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
Réponse acceptée

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
Réponse acceptée

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
Auteur

Ah d'accord.

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

Et bonne année ;)