我有一个分页功能,可以浏览时间表并每周推进日期,并显示与新日期相关的详细信息。
在测试一些新数据的同时,我遇到了分页问题。因为它不会通过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);
在我测试过的所有其他几周之间,分页很愉快地移动,并且显然在适当的时候使用这个增量/减量。
希望我遗漏了一些明显的东西。有什么想法吗?
答案 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);