我正在测试这些案例:
$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
为什么会这样?
当然有些事情我不太明白。
答案 0 :(得分:3)
参数为year
,week
,dayofweek
。 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 年