Php 考虑到星期日是开始日,我如何获得周数?

Php 考虑到星期日是开始日,我如何获得周数?,php,datetime,week-number,Php,Datetime,Week Number,此代码将星期一视为一周的第一天,并给出周数。我想把星期天作为一周的开始日,得到周数。我该怎么做?据我所知,没有任何选项可以更改开始日期。因此,您可以检查当前日期是否为星期日,如果是,则将周数增加1: $date = 'some date'; $todays_week = date('W',strtotime($date)); 最优雅的解决方案是只需在输入中添加一整天: function getIsoWeeksInYear($year) { $date = new DateTime;

此代码将星期一视为一周的第一天,并给出周数。我想把星期天作为一周的开始日,得到周数。我该怎么做?

据我所知,没有任何选项可以更改开始日期。因此,您可以检查当前日期是否为星期日,如果是,则将周数增加1:

$date = 'some date';
$todays_week = date('W',strtotime($date));

最优雅的解决方案是只需在输入中添加一整天:

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');

唯一不起作用的情况是12月31日,也是周日。在这种情况下,答案将错误地说1。你得检查一下。

不太清楚。请记住,ISO 8601周的编号范围为1-53(含1-53)。例如,2010年1月3日星期日是ISO 2009年,ISO第53周。谢谢你的评论:+1。我不确定上周的情况。然后改为53。不是所有ISO年都有53周。根据各种因素,周数为52周或53周。看见简言之,12月28日的测试应该会找到一年中最高的周数(52或53)。
$todays_week = date('W', strtotime($date) + 60 * 60 * 24 );