今天,在我编写的应用程序中,一位同事报告说,我在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
?
答案 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'
不是可选的。我不能说出为什么它在某些情况下没有效果,但是看起来很巧合。