2

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

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

调试代码我最终找到了问题的根源,即将表示 22/10/2012 的日期戳增加 7 天返回(通过 strftime)日期为 28/10/2012,而显然我期待的日期是 29 /10/2012。此错误有效地导致连续循环,因为 %W(驱动每周分页)在 2012 年 10 月 22 日为 43,在 2012 年 10 月 28 日为 43,当然在 2012 年 10 月 29 日应该为 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);

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

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

4

3 回答 3

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');
于 2012-09-20T11:30:11.223 回答
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的有效输出格式,请参见此处

于 2012-09-20T11:32:54.650 回答
0

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

$time_Stamp_1a = strtotime("+1 week", $time_Stamp_1);
于 2012-09-20T11:08:51.320 回答