2014-07-03 14 views
6

mam trzy wejściaPodział czasu w odstępach

  1. czasu startu
  2. czasu zakończenia
  3. intervel czasu.

Przykład

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

muszę wyjście jak 01:00, 01:10, 01:20, 01:30

Próbowałem to poniżej kod, to nie działa .

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

?> 

Kiedy próbuję z początkowym i końcowym odstępem czasu wynosi 60min, powyższy kod działa.

Jestem nowy w PHP.

Każdy mi pomoże.

+0

Jak to nie działa?Czy format wyjściowy jest nieprawidłowy, czy co? – Ignas

Odpowiedz

3

Spróbuj tego:

$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

działa poprawnie – Gowthaman

2

Twój kod działa dobrze, Właśnie dodałem zmienną, która idicates interwał i sformatowany czas, aby być taka sama jako I need the output like 01:00, 01:10, 01:20, 01:30 i ostatnią rzeczą jest to, że powinieneś najpierw wydrukować czas, w którym to inkrementuje.

Oto kod:

$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

myślę, że kod działa zgodnie z oczekiwaniami ... Może mógłbyś byłaby to tak, aby mieć dokładne dane wyjściowe jesteś wymagający:

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

?> 

Jeśli zmienisz z 10 na 60 przedziału, wtedy wydrukuje tylko czas rozpoczęcia, ponieważ czas_początkowy + 60 jest wyższy niż czas zakończenia; czy tego się spodziewałeś?

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

Brakowało ci ostatniego możliwego wyjścia, ponieważ dałoby to tę samą wartość, co twój czas zakończenia. a < b powinien być a <= b

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

3

Spróbuj tego z DateTime i 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

Można to osiągnąć z modify, DateInterval i 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') .", "; 
} 
Powiązane problemy