strtotime结果没有意义,php错误?
以下行:
echo date('d', strtotime('First Saturday August 2015'));
prints ,这似乎没有任何意义,因为一周中某一天的第一次出现不能在7th之后。08
它是一个php错误还是一个php错误,甚至可能是一个php错误?我不知道。。。
php 版本: 5.5.19
以下行:
echo date('d', strtotime('First Saturday August 2015'));
prints ,这似乎没有任何意义,因为一周中某一天的第一次出现不能在7th之后。08
它是一个php错误还是一个php错误,甚至可能是一个php错误?我不知道。。。
php 版本: 5.5.19
更新#1:在我研究了PHP源代码中的一些内容之后,在下面解释了像“of
”这样的简单单词所产生的巨大差异。
更新 #2:实际上,PHP手册上有一个文档页面,解释了 接受的日期格式。我只是直到现在才意识到这一点。感谢@Outspaced在他们的答案中提供链接。strftime()
要快速轻松地阅读,请跳过更新#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()
在阅读了函数 strtotime()
的 PHP 源代码之后,我认为它解析为 .First Saturday August 2015
First Saturday
August 2015
August 2015
是一个绝对的表达式,因为没有关于它产生2015-08-01(2015
年8月1日)的日期的指示,这是一个合理的猜测(我认为是唯一可能的)。
First Saturday
是相对表达式。它是相对于字符串 () 中提供的绝对标记或作为 的第二个参数,它将绝对标记的时间戳向后或向前移动一定量。August 2015
strtotime()
将它们放在一起,解释为自2015年8月1日
以来的第一个星期六
计数,这确实是 。strtotime()
First Saturday August 2015
August 8, 2015
另一方面,使用不同的规则进行解析。、 、 、 或 从 的任何序号之一 to ,后跟工作日名称(完整或缩写)和后跟 of
被解析为所提供月份的工作日(如果字符串中未提供任何月份,则为当前月份)。First Saturday of August 2015
next
last
previous
this
first
twelfth
在我发现接受的字符串的格式实际上在PHP文档中进行了解释之后,解释变得更加简单。请查看文档页面中的第二个“注意:”框。strtotime()
First Saturday August 2015
在注释中的第 4 项中进行了解释:
“序号日名”确实会推进到另一天。
First Saturday of August 2015
在注释的第 6 项中进行了解释:
“序号日名'的'”不会前进到另一天。
注释以一整块解释结束,专门用于神奇的单词“的
”。
您需要一个“的”:
date('d/m/Y', strtotime('First Saturday of August 2015'))
请参阅手册:http://docs.php.net/manual/en/datetime.formats.relative.php