2014-07-03 13 views
6

Ich habe drei EingangsSplit Zeit in Intervalle

  1. Startzeit
  2. Endzeit
  3. intervel Zeit.

Beispiel

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

ich die Ausgabe wie 01.00 brauchen, 01.10, 01.20, 01:30

i dies unter Code versucht haben, seine nicht funktioniert .

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

?> 

Wenn ich versuche mit Start und Ende Zeitintervall ist 60min, der obige Code ist Arbeit.

Ich bin neu in PHP.

Bitte helfen Sie mir.

+0

Wie funktioniert das nicht für Sie?Ist das Ausgabeformat falsch oder was? – Ignas

Antwort

3

Versuchen Sie folgendes:

$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

+0

funktioniert einwandfrei – Gowthaman

2

Ihr Code funktioniert gut, ich habe soeben eine Variable, die das Intervall idicates und neu formatiert die Zeit, um das gleiche zu sein als I need the output like 01:00, 01:10, 01:20, 01:30 und das letzte Ding ist, dass du zuerst die Zeit drucken solltest, die es so inkrementiert. Hier

ist der Code:

$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); 
} 
2

Ich denke, der Code wie erwartet funktioniert ... Vielleicht haben Sie es Refactoring könnte so die genaue Ausgabe zu haben, Sie benötigen:

<?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); 
} 

?> 

Wenn Sie ändern von 10 auf 60 das Intervall, dann wird nur die Startzeit gedruckt, da start_time + 60 höher als die Endzeit ist; ist das was du erwartest?

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'); 
} 

Sie haben die letzte mögliche Ausgabe vermisst, da dies den gleichen Wert wie Ihre Endzeit ergeben würde. a < b sollte a <= b

Ergebnis waren: http://3v4l.org/8eK3O

3

dieses Versuchen mit Datetime und 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

du mit modify, DateInterval und DatePeriod erreichen können.

$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') .", "; 
}