【问题标题】:PHP Display Hour range today and tomorrowPHP 显示时间范围今天和明天
【发布时间】:2019-01-19 08:29:57
【问题描述】:

我有来自this post.的教程

PHP 代码:

$start = '20:00:00';
$end = '07:59:59'; //need to show until tomorrow time.
$time = strtotime($start);
$timeStop = strtotime($end);

while($time<$timeStop) {
    echo date('H:i', $time);
    $time = strtotime('+30 minutes', $time);
    echo ' - ' . date('H:i', $time) . '<br/>';
}

现在我需要在07:59:59 显示从20:00:00 到明天的时间。

当前代码在我尝试运行时没有结果(空)。

【问题讨论】:

  • 您可能得不到任何结果,因为 20:00:00 大于 07:59:59,所以 $time&lt;$timeStopfalse
  • 换句话说,你的代码没有日期的概念——只有时间。
  • 只需在您的时间中添加一个日期即可:)
  • 只是为了澄清你的问题——你试图呼应这两个日期之间的半小时间隔,对吗?

标签: php


【解决方案1】:

您的代码的问题在于它只是比较时间而不是日期,因此在您的示例中显然开始时间大于结束时间。 试试下面的例子,效果很好。

<?php

$TodayDate = date("Y-m-d");

$start = $TodayDate.' 20:00:00';

$TomorrowDate = new DateTime('tomorrow');

$TomorrowDate = $TomorrowDate->format('Y-m-d');

$end = $TomorrowDate.' 07:59:59'; //need to show until tomorrow time.
$time = strtotime($start);
$timeStop = strtotime($end);

while($time<$timeStop) {
    echo date('H:i', $time);
    $time = strtotime('+30 minutes', $time);
    echo ' - ' . date('H:i', $time) . '<br/>';
}
?>
20:00 - 20:30
20:30 - 21:00
21:00 - 21:30
21:30 - 22:00
22:00 - 22:30
22:30 - 23:00
23:00 - 23:30
23:30 - 00:00
00:00 - 00:30
00:30 - 01:00
01:00 - 01:30
01:30 - 02:00
02:00 - 02:30
02:30 - 03:00
03:00 - 03:30
03:30 - 04:00
04:00 - 04:30
04:30 - 05:00
05:00 - 05:30
05:30 - 06:00
06:00 - 06:30
06:30 - 07:00
07:00 - 07:30
07:30 - 08:00

【讨论】:

    【解决方案2】:

    您可以使用 DateTime 类及其相关方法 - add ~ 这可能会简化任务?修改上述内容以使用预定义的开始时间/结束时间很简单

    $now = new DateTime();
    $end = new DateTime( date( DATE_ATOM, strtotime( 'now + 1day' ) ) );
    
    while( $now->add( new DateInterval('PT30M') ) < $end ){
        echo $now->format( 'H:i:s' ) . '<br />';
    }
    

    使用实际所需的开始/结束时间

    $start = date( DATE_ATOM, strtotime( 'today 8pm' ) );
    $finish = date( DATE_ATOM, strtotime( sprintf( '%s + 1day',$start ) ) );
    
    $now = new DateTime( $start);
    $end = new DateTime( $finish );
    
    while( $now->add( new DateInterval('PT30M') ) < $end ){
        echo $now->format( 'H:i:s' ) . '<br />';
    }
    

    【讨论】:

    • 如果您需要特定的开始和结束时间怎么办?
    【解决方案3】:

    只需添加一些日期。 搜索哪一天的 08:00:00?

    $start = '01/01/2019 20:00:00';
    $end = '01/02/2019 08:00:00';
    
    $time = strtotime($start);
    $timeStop = strtotime($end);
    
    while ($time<$timeStop) {
        echo date('H:i', $time);
        $time = strtotime('+30 minutes', $time);
        echo ' - ' . date('H:i', $time) . '<br/>';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 2011-06-14
      相关资源
      最近更新 更多