php递增时间戳错误?

时间:2012-09-20 11:04:53

标签: php timestamp

我有一个分页功能,可以浏览时间表并每周推进日期,并显示与新日期相关的详细信息。

在测试一些新数据的同时,我遇到了分页问题。因为它不会通过22/10/2012页。

调试代码我最终找到问题的根源,即将代表22/10/2012的日期戳递增7天(通过strftime),日期为28/10/2012,显然我期待约会2012年10月29日。此错误有效地导致连续循环为%W(驱动每周分页)为2012年10月22日为43,2012年10月28日为43,当然,对于29/10/2012应为44。

在快速测试中隔离并重新创建此问题,我使用了以下内容:

/*
 * test %W
 */

$time_Stamp_1 = mktime(0,0,0,10,22,2012);
echo "date : " . strftime("%d/%m/%Y", $time_Stamp_1);
echo "W for first time stamp " . $time_Stamp_1 . " is " . strftime("%W", $time_Stamp_1); 

$time_Stamp_1a = $time_Stamp_1 += (60 * 60 * 24 * 7);
echo "new date : " . strftime("%d/%m/%Y", $time_Stamp_1a);
echo "W for new date time stamp: " . strftime("%W", $time_Stamp_1a);

$time_Stamp_2 = mktime(0,0,0,10,29,2012);
echo "W for second time stamp: " . strftime("%W", $time_Stamp_2);

在我测试过的所有其他几周之间,分页很愉快地移动,并且显然在适当的时候使用这个增量/减量。

希望我遗漏了一些明显的东西。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

或者更好地使用DateTime

 // Create the DateTime object
 $date = new DateTime('2012-22-10');
 echo $date->format('d/m/Y');

 // Add one week
 $date->modify('+1 week');
 echo $date->format('d/m/Y');

答案 1 :(得分:1)

PHP DateTime类是要走的路: -

$inFormat = 'd/m/Y h:i';
$outFormat = 'd/m/Y';
$date = DateTime::createFromFormat($inFormat, '22/10/2012 00:00');
$interval = new DateInterval('P7D');
for($i = 0; $i < 10; $i++){
    $date->add($interval);
    var_dump($date->format($outFormat) . " is in week " . $date->format('W'));week');
}

提供以下输出: -

string '29/10/2012 is in week 44' (length=24)
string '05/11/2012 is in week 45' (length=24)
string '12/11/2012 is in week 46' (length=24)
string '19/11/2012 is in week 47' (length=24)
string '26/11/2012 is in week 48' (length=24)
string '03/12/2012 is in week 49' (length=24)
string '10/12/2012 is in week 50' (length=24)
string '17/12/2012 is in week 51' (length=24)
string '24/12/2012 is in week 52' (length=24)
string '31/12/2012 is in week 01' (length=24)

快速浏览日历告诉我,这是正确的。

请参阅此处了解有效格式字符串http://us.php.net/manual/en/datetime.createfromformat.php
另请参阅DateInterval类。

请参阅此处了解DateTime :: format()http://us.php.net/manual/en/function.date.php

的有效输出格式

答案 2 :(得分:0)

尝试使用strtotime()进行时间计算 - 例如下周使用:

$time_Stamp_1a = strtotime("+1 week", $time_Stamp_1);