如何用PHP打印两个日期之间的所有小时?预期:凌晨01:00凌晨02:00。。下午21:00
虽然最可靠的答案在大多数情况下都是正确的,但它并不能涵盖所有答案。
当时区、夏令时开始发挥作用时,事情就会变得一团糟。
考虑使用DateTime
和DateInterval
$from = new DateTime("2018-01-10 10:00:00 UTC");
$to = new DateTime("2018-01-10 16:00:00 UTC");
$interval = new DateInterval("PT1H");
for ($now = clone $from; $now < $to; $now->add($interval)) {
echo $now->format("Y-m-d H:i:s e --> H:i A") . "n";
}
将很好地输出
2018-01-10 10:00:00 UTC --> 10:00 AM 2018-01-10 11:00:00 UTC --> 11:00 AM 2018-01-10 12:00:00 UTC --> 12:00 PM 2018-01-10 13:00:00 UTC --> 13:00 PM 2018-01-10 14:00:00 UTC --> 14:00 PM 2018-01-10 15:00:00 UTC --> 15:00 PM
但此代码也将涵盖时间变化
$from = new DateTime("2018-03-24 20:00:00 Europe/Warsaw");
$to = new DateTime("2018-03-25 06:00:00 Europe/Warsaw");
$interval = new DateInterval("PT1H");
for ($now = clone $from; $now < $to; $now->add($interval)) {
echo $now->format("Y-m-d H:i:s e --> H:i A") . "n";
}
2018-03-24 20:00:00 Europe/Warsaw --> 20:00 PM 2018-03-24 21:00:00 Europe/Warsaw --> 21:00 PM 2018-03-24 22:00:00 Europe/Warsaw --> 22:00 PM 2018-03-24 23:00:00 Europe/Warsaw --> 23:00 PM 2018-03-25 00:00:00 Europe/Warsaw --> 00:00 AM 2018-03-25 01:00:00 Europe/Warsaw --> 01:00 AM 2018-03-25 03:00:00 Europe/Warsaw --> 03:00 AM 2018-03-25 04:00:00 Europe/Warsaw --> 04:00 AM 2018-03-25 05:00:00 Europe/Warsaw --> 05:00 AM
注意,由于我们切换到夏令时间(CET到CEST时区(,因此没有02:00 AM
尝试for循环,它将打印两个值之间的小时数
$a = '05:00';
$b = '10:00';
// convert the strings to unix timestamps
$a = strtotime($a);
$b = strtotime($b);
// loop over every hour (3600sec) between the two timestamps
for($i = 0; $i < $b - $a; $i += 3600) {
// add the current iteration and echo it
echo date('H:i', $a + $i).'<br>';
}
?>
输出:
05:00
06:00
07:00
08:00
09:00
10:00