【问题标题】:how can I create a list of times in php?如何在 php 中创建时间列表?
【发布时间】:2018-03-09 02:39:02
【问题描述】:

我有 x。

x 是分钟。

我有一个字符串 start_time,例如:7:00

我有一个字符串 end_time,例如:14:00

如何打印每个循环增加 x 分钟的时间列表?

我想打印这样的东西:

if x = 30

7:00 - 7:30
7:30 - 8:00
...
13:30 - 14:00

我尝试用 php 中的数学函数来做这件事:

$time = '7:00';
$mm = $hh = 0;
$str = explode(":",$time);
if(($str[1]+ $x) > 60)
{
...
}

但它有更简单的方法吗? php中的date函数可以吗?

【问题讨论】:

标签: php


【解决方案1】:

您可以将DatePeriodDateInterval 一起使用来实现此目的。

使用您的开始和结束时间创建两个 DateTime 间隔,并创建一个带有您需要的分钟数的 DateInterval 实例。然后,使用此信息创建一个DatePeriod,并对其进行迭代以显示结果时间:

<?php
$minutes = 15;
$start = "07:00";
$end = "14:00";
$startDate = DateTime::createFromFormat("H:i", $start);
$endDate = DateTime::createFromFormat("H:i", $end);
$interval = new DateInterval("PT".$minutes."M");
$dateRange = new DatePeriod($startDate, $interval, $endDate);
foreach ($dateRange as $date) {
    echo $date->format("H:i")."<br>";
}

Demo

结果

07:00

07:15

07:30

07:45

08:00

08:15

08:30

08:45

09:00

09:15

09:30

09:45

10:00

10:15 // 等等

【讨论】:

    【解决方案2】:

    您可以将DatePeriod 对象与所​​需的DateInterval 对象一起使用。

    例如:https://3v4l.org/lg8QW

    $start = new \DateTime('07:00');
    $end = new \DateTime('14:00');
    $interval = new \DateInterval('PT1M'); //change to desired interval
    $periods = new \DatePeriod($start, $interval, $end);
    foreach ($periods as $period) {
       echo $period->format('H:i') ;
    }
    

    结果:

    07:00
    07:01
    07:02
    07:03
    07:04
    07:05
    07:06
    07:07
    07:08
    07:09
    07:10
    07:11
    07:12
    07:13
    07:14
    07:15
    07:16
    07:17
    07:18
    07:19
    07:20
    //...
    13:59
    

    【讨论】:

      【解决方案3】:

      您可以使用DateTime 对象。
      就像这样:

      <?php
      
      $start_time = '7:00';
      
      $date1 = DateTime::createFromFormat('H:i', $start_time);
      $old = $start_time;
      
      while (true) {
          $date1->modify('+30 min');
          echo $old . '-' . $date1->format('H:i').PHP_EOL;
      
          $old = $date1->format('H:i');
          if ($old == '14:00')  {
              break;
          }
      }
      

      输出:

      7:00-07:30
      07:30-08:00
      08:00-08:30
      ...
      13:30-14:00

      更多信息请参见此处的手册:DateTime

      【讨论】:

        猜你喜欢
        • 2019-07-08
        • 1970-01-01
        • 2011-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多