【问题标题】:Split time into intervals将时间分成间隔
【发布时间】:2014-07-03 09:32:47
【问题描述】:

我有三个输入

  1. 开始时间
  2. 结束时间
  3. 间隔时间。

例子

start time - 01:00 
end time  - 01:30 
intervel-time  - 10 min

我需要像 01:00、01:10、01:20、01:30 这样的输出

我已经尝试了下面的代码,它不起作用。

<?php

$startTime=strtotime("2012-07-13 01:00:00");
$endTime=strtotime("2012-07-13 01:30:00");

$time=$startTime;
while ($time < $endTime) {
    echo date('H:i:s', $time) . " - ";
    $time = strtotime('+10 minutes', $time);
    echo date('H:i:s', $time) . "<br>";
}

?> 

当我尝试开始和结束时间间隔为 60 分钟时,上面的代码是有效的。

我是 PHP 新手。

任何人请帮助我。

【问题讨论】:

  • 这怎么不适合你?是输出格式不正确还是什么?

标签: php datetime time


【解决方案1】:

试试这个:

$startTime = new DateTime("2012-07-13 01:00:00");
$endTime = new DateTime("2012-07-13 01:30:00");

while ($startTime < $endTime) {
    echo $startTime->format('H:i:s') . ' - ';
    echo $startTime->modify('+10 minutes')->format('H:i:s') . "\n";
}

【讨论】:

    【解决方案2】:

    用 DateTime 和 DateInterval 试试这个:

    <?php
    $startTime = new DateTime('2012-07-13 01:00:00');
    $endTime = new DateTime('2012-07-13 01:30:00');
    
    while($startTime <= $endTime) {
        echo $startTime->format('H:i:s') . ' ';
        $startTime->add(new DateInterval('PT10M'));
    }
    ?>
    

    【讨论】:

      【解决方案3】:

      您的代码工作得很好,我刚刚添加了一个变量来指示间隔并重新格式化时间以便与I need the output like 01:00, 01:10, 01:20, 01:30 相同,最后一件事是您应该首先打印时间增量它所以.

      代码如下:

      $startTime=strtotime("2012-07-13 01:00:00");
      $endTime=strtotime("2012-07-13 01:30:00");
      $interval = "10";
      $time=$startTime;
      while ($time <= $endTime) {
          echo date('H:i', $time) . "<br>";
          $time = strtotime('+'.$interval.' minutes', $time);
      }
      

      【讨论】:

        【解决方案4】:

        我认为代码按预期工作......也许你可以这样重构它以获得你需要的确切输出:

        <?php
        
        $startTime=strtotime("2012-07-13 01:00:00");
        $endTime=strtotime("2012-07-13 01:30:00");
        $intervel="60";
        
        $time=$startTime;
        echo date('H:i', $time);
        $time = strtotime('+'.$intervel.' minutes', $time);
        while ($time <= $endTime) {
            echo "," . date('H:i', $time);
            $time = strtotime('+'.$intervel.' minutes', $time);
        }
        
        ?>
        

        如果将间隔从10更改为60,则只会打印开始时间,因为start_time+60高于结束时间;这是你所期望的吗?

        【讨论】:

          【解决方案5】:

          您可以通过modifyDateIntervalDatePeriod 实现此目的。

          $startTime = new DateTime('2012-07-13 01:00:00');
          $endTime   = new DateTime('2012-07-13 01:30:00');
          $endTime   = $endTime->modify( '+1 minute' );
          $interval  = new DateInterval('PT10M');
          $daterange = new DatePeriod($startTime, $interval ,$endTime);
          foreach($daterange as $res) {
                  echo $res->format('H:i') .", ";
          }
          

          【讨论】:

            【解决方案6】:
            $start = DateTime::createFromFormat('Y-m-d H:i:s', '2012-07-13 01:00:00', new DateTimeZone('Europe/Berlin'));
            $end = DateTime::createFromFormat('Y-m-d H:i:s', '2012-07-13 01:30:00', new DateTimeZone('Europe/Berlin'));
            while($start <= $end) {
                echo $start->format('H:i:s'), "\n";
                $start->modify('+10 minutes');
            }
            

            您错过了最后一个可能的输出,因为它会产生与您的结束时间相同的值。 a &lt; b 应该是 a &lt;= b

            结果:http://3v4l.org/8eK3O

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-01-20
              • 2019-02-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-11-09
              • 2016-08-25
              相关资源
              最近更新 更多