考虑到周日是开始的日子,我怎么能得到周数呢?


How can I get the week number considering Sunday as the start day?

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