gpt4 book ai didi

php - strtotime 结果没有意义,php 错误?

转载 作者:IT王子 更新时间:2023-10-28 23:49:12 25 4
gpt4 key购买 nike

下面一行:

echo date('d', strtotime('First Saturday August 2015'));

打印 08,这似乎没有任何意义,因为一周中一天的第一次出现不能在 7 号之后。

它是一个 php bug 还是一个 php bug 或者甚至是一个 php bug?我不知道...

php版本:5.5.19

最佳答案

更新 #1: 在我对PHP 源代码。

更新#2:实际上有一个 PHP 手册的文档页面解释了the formatsstrftime() 接受的日期。直到现在我才意识到这一点。感谢@Outspaced 在他们的回答中提供链接。

如需快速轻松阅读,请跳过更新#1部分。


初步答案:

确实,

echo date('Y-m-d', strtotime('First Saturday August 2015'));

打印:

2015-08-08

但是

echo date('Y-m-d', strtotime('First Saturday of August 2015'));

打印正确的日期:

2015-08-01

由于 strtotime() 试图“理解”英语,我猜你和它说不同的方言:-)

更新 #1:

在阅读了一些 PHP source code of function strtotime() 之后,我认为它将 First Saturday August 2015 解析为 First Saturday 后跟 August 2015

August 2015 是一个绝对表达式,因为有 no indication about the day它产生 2015-08-01 (2015 年 8 月的 1st)这是一个合理的猜测(我认为唯一可能的猜测)。

第一个星期六relative expression .它相对于字符串 (August 2015) 中提供的绝对标记或作为 strtotime() 的第二个参数,它是 "shifts"绝对标记的时间戳向后或向前一定量。

将它们放在一起,strtotime()First Saturday August 2015 解释为 First SaturdayAugust 1 开始计数, 2015 确实是 2015 年 8 月 8 日

另一方面,2015 年 8 月的第一个星期六 使用 different rule 进行解析. nextlastpreviousthisfirst 中的任何序数之一到 twelfth,后跟工作日名称(全名或缩写),后跟 of 被解析为所提供月份的工作日(或如果字符串中没有提供当前月份)。

更新 #2

后来发现strtotime()接受的字符串格式是居然是explained在 PHP 文档中,解释变得更加简单。查看 documentation page 中的第二个“注意:”框.

2015 年 8 月第一个星期六在注释中的第 4 项中进行了解释:

"ordinal dayname" does advance to another day.

2015 年 8 月的第一个星期六在注释的第 6 项中进行了解释:

"ordinal dayname 'of'" does not advance to another day.

注释以一个完整的解释 block 结束,专门用于magical单词“of”。

关于php - strtotime 结果没有意义,php 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28218413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com