$date = 'some date';
$todays_week = date('W',strtotime($date));
这段代码给出了考虑星期一为一周的第一天的周数。我想要得到考虑星期日为一周开始的周数。我怎么做呢?
最优雅的解决方案是简单地在输入中加上整整一天:
$todays_week = date('W', strtotime($date) + 60 * 60 * 24 );
唯一不工作的情况是,它是12月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');