2014-07-03 26 views
6

tôi có ba đầu vàoChia thời gian vào khoảng

  1. thời gian Bắt đầu
  2. End time
  3. thời gian intervel.

Ví dụ

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

tôi cần đầu ra như 01:00, 01:10, 01:20, 01:30

tôi đã cố gắng này bên dưới mã, nó không làm việc .

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

?> 

Khi tôi thử với khoảng thời gian bắt đầu và kết thúc là 60 phút, mã trên sẽ hoạt động.

Tôi mới sử dụng PHP.

Bất kỳ ai vui lòng giúp tôi.

+0

Cách này không hiệu quả với bạn?Định dạng đầu ra có đúng hay không? – Ignas

Trả lời

3

Hãy thử điều này:

$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

hoạt động chính xác – Gowthaman

2

Mã của bạn làm việc tốt, tôi đã chỉ cần thêm một biến mà idicates khoảng và định dạng lại thời gian để được như vậy là I need the output like 01:00, 01:10, 01:20, 01:30 và điều cuối cùng là trước tiên bạn nên in thời gian tăng lên.

Đây là mã:

$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

Tôi nghĩ rằng mã làm việc như mong đợi ... Có lẽ bạn có thể cấu trúc lại nó như thế này để có kết quả chính xác mà bạn đang cần:

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

?> 

Nếu bạn thay đổi từ 10 đến 60 khoảng thời gian, sau đó nó sẽ chỉ in thời gian bắt đầu vì start_time + 60 cao hơn thời gian kết thúc; đây có phải là điều bạn mong đợi không?

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

Bạn đã thiếu sản lượng cuối cùng có thể vì giá trị đó sẽ mang lại cùng giá trị như thời gian kết thúc của bạn. a < b cần phải có được a <= b

Kết quả: http://3v4l.org/8eK3O

3

Hãy thử điều này với DateTime và 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

Bạn có thể đạt được điều này với modify, DateIntervalDatePeriod.

$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') .", "; 
} 
Các vấn đề liên quan