将时间分成间隔

时间:2014-07-03 09:32:48

标签: php datetime time

我有三个输入

  1. 开始时间
  2. 结束时间
  3. intervel time。
  4. 示例

    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的新手。

    任何人请帮帮我。

6 个答案:

答案 0 :(得分:3)

试试这个:

$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";
}

<强> demo

答案 1 :(得分:3)

尝试使用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'));
}
?>

<强> Eval-Demo

答案 2 :(得分:2)

你的代码工作得很好,我刚刚添加了一个变量,它记录了间隔并重新格式化了时间,以便与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);
}

答案 3 :(得分:2)

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

<?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高于结束时间;这是你期望的吗?

答案 4 :(得分:2)

您可以使用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') .", ";
}

答案 5 :(得分:1)

$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 < b应该是a <= b

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