2014-07-03 21 views
6

Ho tre ingressoTempo intermedio in intervalli

  1. ora di inizio
  2. Ora di fine
  3. tempo intervel.

Esempio

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

devo uscita come 01:00, 01:10, 01:20, 01:30

Ho provato questo codice sottostante, non il suo lavoro .

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

?> 

Quando provo con l'intervallo di inizio e fine è 60 minuti, il codice sopra è funzionante.

Sono nuovo in PHP.

Qualcuno per favore aiutatemi.

+0

Come funziona?Il formato di output è errato o cosa? – Ignas

risposta

3

Prova questo:

$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

funziona correttamente – Gowthaman

2

Il tuo codice funziona bene, ho appena aggiunto una variabile che idicates l'intervallo e riformattato il tempo in modo da essere la stessa come I need the output like 01:00, 01:10, 01:20, 01:30 e l'ultima cosa è che dovresti prima stampare il tempo in cui lo incrementa.

Ecco il codice:

$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

Credo che il codice funziona come previsto ... Forse si potrebbe refactoring in questo modo di avere l'uscita esatta che stai richiedendo:

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

?> 

Se si modifica da 10 a 60 l'intervallo, quindi stamperà solo l'ora di inizio perché l'ora_iniziale +60 è superiore all'ora di fine; è questo che ti aspetteresti?

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

Ti mancava l'ultima uscita possibile in quanto avrebbe lo stesso valore del tuo end-time. a < b avrebbe dovuto essere a <= b

Risultato: http://3v4l.org/8eK3O

3

Prova questa con DateTime e 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

È possibile raggiungere questo obiettivo con modify, DateInterval e DatePeriod.

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