PHP显示小时范围并忽略过去的时间

时间:2016-08-19 11:34:30

标签: php time range

我正在尝试制作一个小脚本,显示11:00到17:00之间的小时范围。 11:00是起点,17:00是终点。到目前为止,我已经做到了这一点:

<?php
// Defining hours
$now = "13:00"; // <- my time now
$start_time = "11:00"; // start point
$end_time = "17:00"; // end point

// Convert to timestamps
$begin = strtotime($start_time);
$end = strtotime($end_time);

// Display range
while($begin <= $end) {
    echo date("H:i", $begin)." </br />";
    $begin = strtotime('1 hour', $begin);
}
?>

它成功输出起点和终点之间的范围:

11:00 
12:00 
13:00 
14:00 
15:00 
16:00 
17:00 

如果实际时间超过开始时间(11:00),我的目标是让此脚本显示从13:00(我的时间)开始的小时范围。像这样:

11:00 hidden
12:00 hidden
13:00 
14:00 
15:00 
16:00 
17:00 

有人可以建议如何制作吗?

3 个答案:

答案 0 :(得分:2)

嗨,在这种情况下,只需使用此

$present = strtotime($now);
if($present > $begin){  
    $begin  = $present;
}

但如果说$now = 18:00或超出此范围

,您需要什么

在这种情况下,此代码不显示任何内容

答案 1 :(得分:0)

我认为您可以简化整个解决方案。您不必使用时间操作,而只是将变量从当前小时11增加到17。要确定$begin,只需使用max(),如下所示:

$begin = max(date('H'), 11);
$end = 17;

while($begin <= $end) {
    echo $begin . ':00<br>';
    $begin++;
}

答案 2 :(得分:0)

我在@ user1234建议中添加了一些小位,现在它可以按照我想要的方式工作。以下是供其他人参考的完整代码。

<?php
// Defining hours
$now = "13:00"; // <- my time now
$start_time = "11:00"; // start point
$end_time = "17:00"; // end point

// Convert to timestamps
$actual = strtotime($now);
$begin = strtotime($start_time);
$end = strtotime($end_time);

// Added this to see if actual time is more than start time - creadit user1234
if($actual > $begin) {  
    $begin = $actual;
}

// Added this to see if actual time is more than 17:00
if($actual > $end) {  
    echo "Try tomorrow";
}
// Display ranges accordingly.
while($begin <= $end) {
    echo date("H:i", $begin)." </br />";
    $begin = strtotime('1 hour', $begin);
}
?>

如果需要,欢迎任何人进行测试和使用。