setISODate那样工作?

时间:2017-08-17 22:13:19

标签: php php-7 isodate

我正在测试这些案例:

$date = new \DateTime();
echo($date->format('Y.m.d')) . PHP_EOL;

$date->setISODate(2018, 1, 1);
echo($date->format('Y.m.d')) . PHP_EOL;

$date->setISODate(2019, 1, 1);
echo($date->format('Y.m.d')) . PHP_EOL;

$date->setISODate(2020, 1, 1);
echo($date->format('Y.m.d')) . PHP_EOL;

输出继电器:

2017.08.17
2018.01.01
2018.12.31
2019.12.30

我知道它会显示:

2017.08.17
2018.01.01
2019.01.01
2020.01.01

为什么会这样?

当然有些事情我不太明白。

2 个答案:

答案 0 :(得分:3)

参数为yearweekdayofweek。 PHP的周从星期一开始,一年的第1周是1月至少4天的第一周。

2018年,这一年从星期一开始,所以第1周从1月1日开始,那是第1周的第1天。

2019年,这一年从星期二开始,所以第一周从2018年12月31日星期一开始,那一周是第一天。

2020年,这一年从星期三开始,所以第一周从2019年12月30日星期一开始,所以这是一周中的第一天。

答案 1 :(得分:0)

setISODate() 存在另一个问题,尤其是在 2021 年的第一周 (1.1.2021 - 3.1.2021)。

ISO 说这是第 53 周,但是一旦你设置了 setISODate(2021, 53) 你就会得到 2022 年