我有timestamp
格式的开始和结束时间。我想将它们分成1小时的时间段。
$t1 = strtotime('2010-05-06 12:00:00');
$t2 = strtotime('2010-05-06 18:00:00');
$timeslots = array();
while ($t1 < $t2) {
$t1 = $t1 + 3600;
$timeslots[] = $t1;
}
foreach ( $timeslots as $slot ) {
echo date("Y-m-d H:i:s", $slot) . '<br/>';
}
这是最有效的方法吗?还是有更好,更通用的方法来做到这一点?
偶尔尝试使用不同长度时间段的其他数字时会出现致命错误:允许的内存大小耗尽,这让我认为它不是很有效。虽然现在似乎没有发生......
(我正在建立预订系统)
答案 0 :(得分:6)
你试过吗
while ($t1 < $t2) {
$t1 = strtotime('+1 hour', $t1);
$timeslots[] = date('Y-m-d H:i:s', $t1);
}
foreach ( $timeslots as $slot ) {
echo $slot . '<br/>';
}
有点相同但更干净。正如所说,strtotime将处理像闰年这样的日期变化。你的PHP内存限制是多少?可能太低了。
答案 1 :(得分:0)
而不是
$t1 = $t1 + 3600;
你会好起来的
$t1 = strtotime('+1 hour', $t1);
后者将适应夏令时,闰年等。
否则,您的代码看起来很好。如果内存不足,可能是由于无限循环。您可能希望添加代码以确保$ t2大于$ t1,如果不是,则切换它们。
答案 2 :(得分:0)
使用php 5.3
$dateTimes = new DatePeriod(
new DateTime($start),
new DateInterval('PT1H'),
new DateTime($end)
);
foreach ($dateTimes as $dt) {
echo $dt->format('Y-m-d H:i:s'), "\n";
}