2011-10-07 26 views
0
strtotime("third Saturday October 2011") 

应该是10/15/2011。不过,它将于2011年10月22日发布。我认为这是因为2011年10月在周六开始,PHP正在看第一周。由于2011年10月1日是星期六而不是整周,它会忽略它。为什么strtotime休息一周?

一些研究建议的星期和月份之间把“的”应该修复它,但不起作用。

上为什么会发生什么,我能做些什么来纠正它有什么建议?

+0

我会避免使用像这样的strtotime。这是可能的,并且经常完成,但是strtotime(和遗留的日期函数)相当......越野车......它们后面的代码相当有趣...使用'DateTime'类代替... – ircmaxell

+0

你指的是:http://php.net/manual/en/class.datetime.php – dcp3450

+0

是的.............. – ircmaxell

回答

2

这是在PHP < 5.2.7一个记录缺陷(见strtotime):

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

您需要升级PHP,或者像Jonathan Kuhn建议的那样使用工作。

+0

我的php版本大于5.2.7。我正在运行5.2.10 http://php.net/releases/index.php – dcp3450

+0

评论了你更深入发布的内容。被问及新的IT人员的更新。他说他会在这个周末做。 (到目前为止挖掘新的IT人员) – dcp3450

+0

一旦我使用“of”工作将IT更新到5.3.8。 – dcp3450

0
<?php echo date('Y-m-d', strtotime('third Saturday of October 2011')); ?> 

适合我。输出是2011-10-15

+0

它对我来说每次都是错误的。我正在运行PHP 5.2.10,也许我们正在使用不同的版本。 – dcp3450

+2

@dcp:5.2.x是生命周期结束(最新的5.2是5.2.16)。升级到至少5.2.16,但最好是5.3.7。 – ircmaxell

+0

我希望我可以。我无法控制我的服务器,IT也不可能为我更新它。 – dcp3450

1

我在php 5.2.6上得到了和你一样的结果。这对我来说虽然不理想。

echo date('Y-m-d', strtotime('Saturday October 2011 +2 weeks'));