如果2月1日是星期一,PHP strtotime()“第一个星期一2月”将返回第二个星期一

时间:2011-10-11 11:00:31

标签: php date timestamp strtotime

我正在研究计算假期的PHP函数:

function holidays($country = 1, $timespan_start = 0, $timespan_end = 0)

假日作为数组中的时间戳返回。

由于我必须计算2月第一个星期一的日期,我尝试了strtotime("first monday february $year")并且我发现这不适用于2010年,因为2010年1月2日是星期一 - 我得到2月8日代替。

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

但我使用的是PHP 5.3.8。 为什么我会遇到此错误?

2 个答案:

答案 0 :(得分:11)

看起来你只是错过了一个“of”:

echo date('Y-m-d', strtotime('first monday of february 2010'));

将提供expected result。有关各种输入格式,请参阅PHP Manual on Relative dates

答案 1 :(得分:2)

根据您的PHP版本,'of'语句可能有效,也可能无效。作为另一种解决方案,尝试:

echo date('Y-m-d',strtotime('monday February 2010'));

将返回2010年2月的第一个星期一。也适用于所有日子。