PHP-7中的“ 2020年1月第一周三”与“ 2020年1月第一周三”

时间:2020-01-09 17:01:23

标签: 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'));

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

2020-01-02
2020-01-02
2020-01-01
2020-01-08

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

2 个答案:

答案 0 :(得分:5)

documentation(第二注释组,第4行)中明确提到了此行为:

“普通日名”确实提前到另一天。 (示例“ 2008年7月23日,星期三”表示“ 2008-07-30”。)

另请参阅第一个注释:

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

因此,如果您未输入单词“ of”,则处理程序将不会捕获语句“ of first day of”。因此,它将字符串拆分为两个语句:首先将日期设置为2020年1月1日(通过将其解释为非相对语句的语句Jan 2020),然后如前所述应用相对语句first wed以上。

答案 1 :(得分:2)

根据documentation,您必须使用的格式是

ordinal space dayname space 'of'

因此'of'不是可选的。我不能说出为什么它在某些情况下没有效果,但是看起来很巧合。