php-7 中的“2020 年 1 月的第一个星期三”与“2020 年 1 月的第一个星期三”

Dil*_*war 4 php datetime php-7

今天我遇到了一个同事在我写的应用程序中报告的 PhP-7 中的一个奇怪的错误/功能。归结为以下几点。

考虑以下:

echo date('Y-m-d', strtotime('first thu of Jan 2020'));
echo '<br/>';
echo date('Y-m-d', strtotime('first thu Jan 2020'));
echo '<br/>';
echo date('Y-m-d', strtotime('first wed of Jan 2020'));
echo '<br/>';
echo date('Y-m-d', strtotime('first wed Jan 2020'));
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我看到以下内容:

2020-01-02
2020-01-02
2020-01-01
2020-01-08
Run Code Online (Sandbox Code Playgroud)

奇怪的是,输出的第 3 行和第 4 行是不同的。为什么?of在这种情况下是错误还是必须使用?

Luc*_*one 5

文档中明确提到了这种行为(第二个注释组,第 4 行):

“序数日名”确实前进到另一天。(例如“2008 年 7 月 23 日第一个星期三”表示“2008-07-30”)。

另请参阅第一个注意事项:

相对语句总是在非相对语句之后处理。这使得“2008 年7 月+1 周”和“2008 年7 月+1 周”等价。

所以如果你不写“ of”这个词,处理器就不会捕捉到“第一天”这样的语句。因此,它将字符串拆分为两个语句:首先将日期设置为 2020 年 1 月 1 日(通过将Jan 2020其解释为非相对语句的语句),然后应用上述相对语句first wed