2017-08-23 59 views
-4

我想在開始時間和結束時間之間的相同時間段中劃分。在同一時間段中劃分時間

PHP函數:

public function time_slot_time() { 
    $startTimeInterval = '15'; 
    $open = '2017-08-23T1:00:00-05:00'; 
    $close = '2017-08-23T5:00:00-05:00'; 
    // Logic 
} 

輸出:

1:00PM - 1:15PM 
1:15PM - 1:30PM 
1:30PM - 1:45PM 
1:45PM - 2:00PM 
2:00PM - 2:15PM 
... 
3:15PM - 3:30PM 
3:30PM - 4:45PM 
4:45PM - 5:00PM 

回答

3

PHP提供了非常豐富的功能集與日期和時間,請參閱http://php.net/manual/en/book.datetime.php

在這種情況下,DateTimeDateIntervalDatePeriod類都非常有用:

<?php 
$interval = DateInterval::createFromDateString('15 minutes'); 

$begin = new DateTime('2017-08-23T1:00:00-05:00'); 
$end = new DateTime('2017-08-23T5:00:00-05:00'); 
// DatePeriod won't include the final period by default, so increment the end-time by our interval 
$end->add($interval); 

// Convert into array to make it easier to work with two elements at the same time 
$periods = iterator_to_array(new DatePeriod($begin, $interval, $end)); 

$start = array_shift($periods); 

foreach ($periods as $time) { 
    echo $start->format('H:iA'), ' - ', $time->format('H:iA'), PHP_EOL; 
    $start = $time; 
} 

DatePeriod工具PHP的Traversable接口,這意味着你可以像數組一樣循環它(或者只是將它轉換爲一個,在這種情況下)。

+0

第一個時間間隔重複,最後一個時間間隔丟失。 上午01:00 - 凌晨01:00 上午01:00 - 上午01點15分 上午01點15分 - 凌晨01:30 凌晨01:30 - 上午01時45 上午01時45分 - 上午02時00分 上午02時00分 - 凌晨02:15 02 :15AM - 凌晨02:30 凌晨02:30 - 上午02點45分 上午02點45分 - 上午03時00 上午03時00分 - 上午03時15分 上午03時15分 - 上午03點30 上午03點30 - 上午03時45 上午03時45分 - 04:00 AM 04:00 AM - 04:15 AM 04:15 AM - 04:30 AM 04:30 AM - 04:45 AM –

+0

此外,我們給了-05:00時區,爲什麼它沒有被考慮?你知道嗎? 結果將是:08:00 - 08:15 08:15 - 08:30 08:30 - 08:45 08:45 - 09:00 09:00 - 09:15 09:15 - 09:30 09:30 - 09:45 09:45 - 10:00 10:00 - 10:15 10:15 - 10:30 10:30 - 10:45 10:45 - 11: 00 11:00 - 11:15 11:15 - 11:30 11:30 - 11:45 11:45 - 12:00 –

+1

@PratikKamani我爲您的第一條評論添加了修復程序。你沒有提到在不同的時區顯示輸出,但是如果你想要輸入** UTC **,那麼你應該可以通過調用'setTimeZone(new DateTimeZone('UTC'))'來實現這一點。 'DateTime'對象。 – iainn

1
public function time_slot_time() { 
    $startTimeInterval = 15*60; 
    $open = strtotime('2017-08-23T1:00:00-05:00'); 
    $close = strtotime('2017-08-23T5:00:00-05:00'); 
    do{ 
     echo date('H:i',$open).' - '.date('H:i',$open+$startTimeInterval). ' <br/>'; 
     $open = $open+$startTimeInterval; 
    }while($open<$close); 
} 

我的邏輯是簡單地通過時隙走路和呼應他們......沒什麼特別的。當然有更好的方法,但它應該足夠簡單,讓你圍繞它構建。

+0

輸出是 08:00 - 08:00 08:00 - 08:00 08:00 - 08:00 08:00 - 08:01 08:01 - 08:01 08:01 - 08:01 08:01 - 08:01 08:01 - 08:02 08:02 - 08:02 08:02 - 08:02 –

+0

我們是否需要在strtotime上轉換$ startTimeInterval? –

+0

我很抱歉,我改正了它...需要乘以60,因爲我們正在玩15分鐘,因爲我們正在玩秒 – Salketer