2017-02-13 69 views
0

谁能帮助? 这段代码为什么会产生错误的答案?日期函数产生不正确的输出

echo date("m/d/Y", strtotime("third monday", mktime(0,0,0,8,1,2016))); 
echo '<br/>'.date("m/d/Y", strtotime("third monday 2016-08")); 

结果两条线是:

08/22/2016 

2016 8月第三个星期一实际上是08/15/2016 此外,它产生的任何月份的第三个星期一不正确的结果,其中第一个是在星期一。

它的工作原理,如果第一个不是星期一。

+0

什么奇怪的是,如果你做'周一2016-08'它'8月1日/ 2016'像它应该做的,但如果你做'第一个星期一2016-08'它去'2016年8月8日'... – Albzi

+0

2016-08-01之后的第三个星期一是2016-08-22,因此它会给出您完全公布的结果。 –

回答

0

找到了解决,但我不能告诉你为什么是演戏了,你正在做的方式...希望别人能解释为什么。

echo '<br/>'.date("m/d/Y", strtotime("third monday of August 2016")); 
echo '<br/>'.date("m/d/Y", strtotime("third monday of 2016-08")); 

使用third monday OF将使它工作。

+0

感谢固定工作,因为你我不知道为什么我只有失败,如果第一个星期一。 – Richard

+0

它发生在所有'第一',如果你尝试'2016-08第一个星期二',你也得到错误的日期! @Richard – Albzi

0

找到了这个解释: 观察到''的''和''''''空间dayname空间''的“序号空间dayname空间”中的“of”做了一些特殊的事情。

这一天的日设置为1 “序DAYNAME‘的’”不会进到另一天。 (例如:“2008年7月第一个星期二”是指“2008-07-01”)。 “序号日”确实推进到另一天。 (例:“第一星期二2008年7月”的意思是“2008-07-08”,

(“序DAYNAME”确实提前到另一日 (实施例的“第一星期三2008年7月23日”是指“2008-07 -30" ))

“ '最后' DAYNAME '的'” 对当前月份的最后DAYNAME (例: “上次结婚2008年7月的” 是指 “2008-07-30”)

"'last' dayname" takes the last dayname from the current day. 

(例如:“2008年7月”是指“2008年6月25日”;“2008年7月” 首先将当前日期设置为“2008-07-01”,然后“最后一次星期三“移至前一个星期三,即”2008-06-25“)。