将时间转换为间隔数组

时间:2019-04-02 01:40:31

标签: php

如果我具有以下变量:

$starttime = '09:00';  // Start time
$endtime = '21:00';  // End time
$interval = '30';  // In minutes

生成以下数组的最佳方法是什么?

[
    "09:00" => "09:30",
    "09:30" => "10:00",
    "10:00" => "10:30",
    "10:30" => "11:00",
     ...
    "20:00" => "20:30",
    "20:30" => "21:00"
]

有些相似的主题显示了如何排列时间间隔,但是没有一个能够显示我的特定问题。

4 个答案:

答案 0 :(得分:1)

使用带有DateInterval的DateTime类,您可以实现所需的功能。

DateTime-https://www.php.net/manual/pt_BR/class.datetime.php

DateInterval-https://www.php.net/manual/pt_BR/class.dateinterval.php

<?php
$startTime = DateTime::createFromFormat("H:i", "09:00");
$endTime = DateTime::createFromFormat("H:i", "22:00");
$interval = DateInterval::createFromDateString("30 minutes");

$result = [];
while ($startTime <= $endTime) {
  $result[$startTime->format('H:i')] = $startTime->add($interval)->format('H:i');
}

echo print_r($result, true);

答案 1 :(得分:0)

您可以通过此命令添加30分钟:

    $time=date("H:i", strtotime('+30 minutes', $time));

对于您的问题,可以设置 while 循环(用于检查条件)。

然后设置数组并将索引设置为:

     date("H:i", strtotime('+'.$interval.' minutes', $time));`

并将值设置为:

     date("H:i", strtotime('+'.(2*$interval).'minutes', $time));

然后更新 $time

答案 2 :(得分:0)

您应该只能够使用“ while”循环来增加时间戳,直到达到$ endtime为止。这是一个工作示例:

$starttime = '09:00';  // Start time
$endtime = '21:00';  // End time
$interval = '30';  // In minutes

$result = [];
$last = strtotime($starttime);
$endtimestamp = strtotime($endtime);

while ($last < $endtimestamp) {

    $next = strtotime("+{$interval} minutes", $last);
    $result[date('H:i', $last)] = date('H:i', $next);
    $last = $next;

}

var_dump($result);

答案 3 :(得分:0)

可以使用DateTimeDateInterval

完成
<?php
date_default_timezone_set('UTC');

// define start/end
$begin = DateTime::createFromFormat('H:i', '09:00');
$end = DateTime::createFromFormat('H:i', '21:00');

// define the interval
$interval = new DateInterval('PT30M');
$interval->invert = 1;

// get date range
$daterange = new DatePeriod($begin, $interval, $end);

// loop and build your array
$range = [];
foreach ($daterange as $date){
    $range[$date->format("H:i")] = $date->sub($interval)->format("H:i");
}

print_r($range);

结果:

Array
(
    [09:00] => 09:30
    [09:30] => 10:00
    [10:00] => 10:30
    [10:30] => 11:00
    [11:00] => 11:30
    [11:30] => 12:00
    [12:00] => 12:30
    [12:30] => 13:00
    [13:00] => 13:30
    [13:30] => 14:00
    [14:00] => 14:30
    [14:30] => 15:00
    [15:00] => 15:30
    [15:30] => 16:00
    [16:00] => 16:30
    [16:30] => 17:00
    [17:00] => 17:30
    [17:30] => 18:00
    [18:00] => 18:30
    [18:30] => 19:00
    [19:00] => 19:30
    [19:30] => 20:00
    [20:00] => 20:30
    [20:30] => 21:00
)

https://3v4l.org/FqViY

相关问题