开始和结束时间,分为1小时段

时间:2010-03-23 14:02:49

标签: php strtotime

我有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/>';
}

这是最有效的方法吗?还是有更好,更通用的方法来做到这一点?

偶尔尝试使用不同长度时间段的其他数字时会出现致命错误:允许的内存大小耗尽,这让我认为它不是很有效。虽然现在似乎没有发生......

(我正在建立预订系统)

3 个答案:

答案 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";
}