2012-07-28 60 views
2

我在写每周星期一迭代的php脚本。为什么迭代数周会出现PHP日期错误?

但是,脚本似乎在10月22日后不同步。

<?php 

$october_8th = strtotime("2012-10-08"); 

$one_week = 7 * 24 * 60 * 60; 

$october_15th = $october_8th + $one_week; 
$october_22nd = $october_15th + $one_week; 
$october_29th = $october_22nd + $one_week; 
$november_5th = $october_29th + $one_week; 

echo date("Y-m-d -> l", $october_8th) . '<br />'; 
echo date("Y-m-d -> l", $october_15th) . '<br />'; 
echo date("Y-m-d -> l", $october_22nd) . '<br />'; 
echo date("Y-m-d -> l", $october_29th) . '<br />'; 
echo date("Y-m-d -> l", $november_5th) . '<br />'; 

这将输出:

2012-10-08 -> Monday 
2012-10-15 -> Monday 
2012-10-22 -> Monday 
2012-10-28 -> Sunday 
2012-11-04 -> Sunday 

我希望它说十月29日,但它得到停留在第28位。

我该如何解决这个问题?

回答

5

首选的方法是使用PHP的日期相关类来获取日期。

这些类为您处理日光节约边界很重要,可以手动将给定秒数添加到Unix时间戳(您使用的strtotime()的数字)不能。

以下示例将开始日期和循环四次,每次将日期添加一周。

$start_date = new DateTime('2012-10-08'); 
$interval = new DateInterval('P1W'); 
$recurrences = 4; 

foreach (new DatePeriod($start_date, $interval, $recurrences) as $date) { 
    echo $date->format('Y-m-d -> l') . '<br/>'; 
} 

PHP手册链接:

+0

谢谢你,这的确是完美的解决方案我一直在寻找。 – 2012-07-28 13:08:15

+0

非常欢迎。玩得开心玩这些课程。 – salathe 2012-07-28 13:08:54

1

在写这个问题的时候,我发现当天的节能时间在10月28日结束。

由于初始化日期不包含特定时间自动分配午夜。然而,这在夏日结束时会产生问题。突然之间的时间不再是午夜了,而是在那之前的一个小时,因此比你想象的要早一天。

一个简单的解决将是初始化是中午,而不是午夜时间:

$october_8th = strtotime("2012-10-08 12:00"); 

也许有可能是更好的解决方案(欢迎您留下一个),但这将为此做目的。

相关问题