$date = 'some date';
$todays_week = date('W',strtotime($date));
Этот код дает мне номер недели, считая понедельник первым днем недели. Я хочу получить номер недели, считая воскресенье начальным днем недели. Как я могу это сделать?
$date = 'some date';
$todays_week = date('W',strtotime($date));
Этот код дает мне номер недели, считая понедельник первым днем недели. Я хочу получить номер недели, считая воскресенье начальным днем недели. Как я могу это сделать?
Самое элегантное решение — просто добавить на вход 1 целый день:
$todays_week = date('W', strtotime($date) + 60 * 60 * 24 );
Единственный случай, когда это не работает, - это 31 декабря, а также воскресенье. В этом случае ответ будет неправильным: 1. Вам нужно будет проверить это.
Насколько я знаю, нет никакой возможности изменить день начала. Итак, вы можете проверить, является ли текущий день воскресеньем, и если да, то увеличить номер недели на 1:
function getIsoWeeksInYear($year) {
$date = new DateTime;
$date->setISODate($year, 53);
return ($date->format("W") === "53" ? 53 : 52);
}
function getWeek($date) {
$week = date('W',strtotime($date));
$day = date('N',strtotime($date));
$max_weeks = getIsoWeeksInYear(date('Y',strtotime($date)));
if($day == 7 && $week != $max_weeks) {
return ++$week;
} elseif($day == 7) {
return 1;
} else {
return $week;
}
}
echo getWeek('2012-12-30');