有人可以解释PHP strtotime中的这种奇怪行为吗

时间:2019-09-11 13:00:36

标签: php timestamp

我正在使用日历功能,该功能应该输出星期名称和具有星期数和年份的日期

当年份为2018时,该代码可以正常运行,但是一旦到2019年,该代码就会出现问题

echo date("Y-m-d D", strtotime("monday 2018W37")); // outputs 2018-09-10 Mon
echo date("Y-m-d D", strtotime("monday 2019W37")); // outputs 2019-09-15 Sun

但是,如果您检查有效的日历,则第37周的一个星期一是星期一,日期是2019-09-09

有人可以解释这种行为,并可能提供strtotime的替代方法。

2 个答案:

答案 0 :(得分:2)

您不必在字符串中指定“星期一”,因此请使用:

echo date("Y-m-d D", strtotime("2018W37")); 
echo date("Y-m-d D", strtotime("2019W37"));

哪个返回:

2018-09-10 Mon
2019-09-09 Mon

答案 1 :(得分:2)

您应该这样写

echo date("Y-m-d D", strtotime("2018W37")) . "\n"; // outputs 2018-09-10 Mon
echo date("Y-m-d D", strtotime("2019W37")) . "\n"; // outputs 2019-09-9 Mon

echo date("Y-m-d D", strtotime("2018W37-1")) . "\n"; // outputs 2018-09-10 Mon
echo date("Y-m-d D", strtotime("2019W37-1")) . "\n"; // outputs 2019-09-9 Mon
相关问题