PHP Strtotime不稳定的功能

时间:2011-03-30 13:27:09

标签: php strtotime

以下代码应该在2月的第四个星期五和4月的第四个星期五之后返回。

$datei1 = date(strtotime('fourth friday', strtotime('february', strtotime(date('01-m-Y')))));

$datei2 = date(strtotime('fourth friday', strtotime('april', strtotime(date('01-m-Y')))));

它的工作但是在四月的第五个星期五而不是第四个星期五。我只能假设它不相信四月一日的重要性。

任何想法,

非凡

4 个答案:

答案 0 :(得分:4)

您的代码无缘无故非常复杂。试试这个(PHP 5.3):

$date = date('Y-m-d', strtotime('fourth friday of april 2011'));

这会给你:

2011-04-22

在PHP 5.2中,这种语法似乎适用于所有情况:

$date = date('Y-m-d', strtotime('fourth friday', strtotime('april - 1 second')));

答案 1 :(得分:2)

strtotime('fourth friday', $now)可能实际上意味着“相对于$now的第四个星期五”。

您提供的$now参数是2011年4月1日,即星期五。 4月1日星期五之后的第四个星期五是本月的第五个星期五。

答案 2 :(得分:1)

您似乎正在使用旧版本的PHP。已经引入了重大更改来处理您在此处遇到的边缘情况。在这种情况下,我认为以下是最干净的方法:

echo date('Y-m-d', strtotime('+4 fridays', mktime(0,0,0,4,0,date('Y'))));
// or
echo date('Y-m-d', strtotime('fourth friday', mktime(0,0,0,4,0,date('Y'))));

这应该会给你今年4月的第四个星期五。我已经在5.3中成功测试了,但你必须测试旧的安装。

答案 3 :(得分:0)

PHP Changelog ::

5.2.7在5.2.7之前的PHP 5中,请求在该工作日是该月的第一天的一个月中给定工作日的给定事件将错误地将一周添加到返回的时间戳。这在5.2.7及更高版本中已得到纠正。