par
tesmet » 06 avr. 2018, 19:25
Ce n'est pas particulier à DateTime car strtotime()/date() produiront le même résultat. La semaine appartient à l'année ayant le plus de jours, comme 2018-12-31 est un lundi alors les 6 autres jours de cette semaine là seront de janvier 2019 et donc le lundi 31 décembre 2018 sera à la fois le dernier jour de 2018 et le premier jour de la première semaine de 2019. L'inverse peut aussi se produire comme en 2016 où les 3 premiers jours de janvier appartenaient à la 53e semaine de 2015.
Le code semble vouloir compter le nombres de semaines complètes et incomplètes qu'il y a dans un mois ?
https://3v4l.org/WoAiN
Code : Tout sélectionner
<?php // php7 ?
$tests = [
'2016-01','2016-02','2016-03','2016-04','2016-05','2016-06','2016-07','2016-08','2016-09','2016-10','2016-11','2016-12',
'2018-01','2018-02','2018-03','2018-04','2018-05','2018-06','2018-07','2018-08','2018-09','2018-10','2018-11','2018-12',
];
foreach($tests as $test) {
$start = new DateTime($test);
$end = intval((clone $start)->modify('last day of this month')->format('W'));
if($end < 2) $end = intval((clone $start)->modify('last sunday of this month')->format('W')) + 1; // pour changer 1 en 52 ou 53
$start = intval($start->format('W'));
if($start > 51) $start = 0; // pour changer 52 ou 53 en 0
$weeks = $end - $start + 1;
echo "$test = $weeks<br>";
}
Ce n'est pas particulier à DateTime car strtotime()/date() produiront le même résultat. La semaine appartient à l'année ayant le plus de jours, comme 2018-12-31 est un lundi alors les 6 autres jours de cette semaine là seront de janvier 2019 et donc le lundi 31 décembre 2018 sera à la fois le dernier jour de 2018 et le premier jour de la première semaine de 2019. L'inverse peut aussi se produire comme en 2016 où les 3 premiers jours de janvier appartenaient à la 53e semaine de 2015.
Le code semble vouloir compter le nombres de semaines complètes et incomplètes qu'il y a dans un mois ?
[url]https://3v4l.org/WoAiN[/url]
[code]<?php // php7 ?
$tests = [
'2016-01','2016-02','2016-03','2016-04','2016-05','2016-06','2016-07','2016-08','2016-09','2016-10','2016-11','2016-12',
'2018-01','2018-02','2018-03','2018-04','2018-05','2018-06','2018-07','2018-08','2018-09','2018-10','2018-11','2018-12',
];
foreach($tests as $test) {
$start = new DateTime($test);
$end = intval((clone $start)->modify('last day of this month')->format('W'));
if($end < 2) $end = intval((clone $start)->modify('last sunday of this month')->format('W')) + 1; // pour changer 1 en 52 ou 53
$start = intval($start->format('W'));
if($start > 51) $start = 0; // pour changer 52 ou 53 en 0
$weeks = $end - $start + 1;
echo "$test = $weeks<br>";
}[/code]