PHP 日期:2015/2016 年的周数

PHP date: week numbers for 2015/2016

如 ISO 8601 所述,有些年份有 53 周,2015 年就是其中之一。 2016 年的下一周是几号?是否又从第 01 周开始?我问的原因是,在我的一个项目中,URL“2016-W01”确实显示了错误的日期(例如,2016 年 1 月 2 日星期一 - 应该是 2016 年 1 月 4 日星期一)。如果我调用“2016-W02”,正确的日子即将到来(1 月 4 日至 10 日),但是 "obviously?" 这应该是第 01 周而不是第 2 周..

对此有什么想法吗?谢谢!

本周仅从 1 月 1 日的 01 开始。但在这种情况下,1 月 1 日在第 53 周,因此它会跳过第 01 周,并显示为 1 月 4-10 日的第 02 周。

<?php
$dt = new DateTime('2015-12-27');
for($i=0; $i<12; $i++) {
    echo $dt->format('Y-m-d , D, W'), "\r\n";
    $dt->modify('+ 1 day');
}

打印(没有描述)

2015-12-27 , Sun, 52
2015-12-28 , Mon, 53\
2015-12-29 , Tue, 53|
2015-12-30 , Wed, 53|
2015-12-31 , Thu, 53 <-- this thursday is in 2015, therefore this is week 53
2016-01-01 , Fri, 53|
2016-01-02 , Sat, 53|
2016-01-03 , Sun, 53/

2016-01-04 , Mon, 01\
2016-01-05 , Tue, 01|
2016-01-06 , Wed, 01|
2016-01-07 , Thu, 01 <-- this is the first thursday in 2016, therefore this is week 1

编辑和顺便说一句:您可能希望将项目切换为使用标准 php date/time 解析器:

<?php
$dt = new DateTime('2016W01'); echo $dt->format('Y-m-d, D, W'), "\r\n";
$dt = new DateTime('2016W02'); echo $dt->format('Y-m-d, D, W'), "\r\n";

打印

2016-01-04, Mon, 01
2016-01-11, Mon, 02