6
A
回答
9
感謝您重新打開問題alex。
這是一個應該與功能程序員產生共鳴的解決方案。
function halfHourTimes() {
$formatter = function ($time) {
if ($time % 3600 == 0) {
return date('ga', $time);
} else {
return date('g:ia', $time);
}
};
$halfHourSteps = range(0, 47*1800, 1800);
return array_map($formatter, $halfHourSteps);
}
7
我決定這一次是更好:)
function hoursRange($lower = 0, $upper = 23, $step = 1, $format = NULL) {
if ($format === NULL) {
$format = 'g:ia'; // 9:30pm
}
$times = array();
foreach(range($lower, $upper, $step) as $increment) {
$increment = number_format($increment, 2);
list($hour, $minutes) = explode('.', $increment);
$date = new DateTime($hour . ':' . $minutes * .6);
$times[(string) $increment] = $date->format($format);
}
return $times;
}
0
這也許是一個更優雅的方式,但它需要的時間是在幾秒鐘內(也使得它更靈活)。
function time_range($start, $end, $step = 1800) {
$return = array();
for($time = $start; $time <= $end; $time += $step)
$return[] = date('g:ia', $time);
return $return;
}
18
下面是一個使用秒更精確的Alex's function的改進版本:
function hoursRange($lower = 0, $upper = 86400, $step = 3600, $format = '') {
$times = array();
if (empty($format)) {
$format = 'g:i a';
}
foreach (range($lower, $upper, $step) as $increment) {
$increment = gmdate('H:i', $increment);
list($hour, $minutes) = explode(':', $increment);
$date = new DateTime($hour . ':' . $minutes);
$times[(string) $increment] = $date->format($format);
}
return $times;
}
因此,爲了用1小時的間隔時間的陣列在24小時時間段期間,使用默認值:
hoursRange();
,這將給你如下:
Array
(
[00:00] => 12:00 am
[01:00] => 1:00 am
[02:00] => 2:00 am
[03:00] => 3:00 am
[04:00] => 4:00 am
[05:00] => 5:00 am
[06:00] => 6:00 am
[07:00] => 7:00 am
[08:00] => 8:00 am
[09:00] => 9:00 am
[10:00] => 10:00 am
[11:00] => 11:00 am
[12:00] => 12:00 pm
[13:00] => 1:00 pm
[14:00] => 2:00 pm
[15:00] => 3:00 pm
[16:00] => 4:00 pm
[17:00] => 5:00 pm
[18:00] => 6:00 pm
[19:00] => 7:00 pm
[20:00] => 8:00 pm
[21:00] => 9:00 pm
[22:00] => 10:00 pm
[23:00] => 11:00 pm
)
這裏有幾個例子使用:
// Every 15 Minutes, All Day Long
$range = hoursRange(0, 86400, 60 * 15);
// Every 30 Minutes from 8 AM - 5 PM, using Custom Time Format
$range = hoursRange(28800, 61200, 60 * 30, 'h:i a');
+0
看起來不錯 - 只是不確定爲什麼要爆炸'$ increment'而不是直接將它傳遞到DateTime構造函數中? – 2015-10-21 17:26:56
1
簡單的解決方案
$h = 0;
while ($h < 24) {
$key = date('H:i', strtotime(date('Y-m-d') . ' + ' . $h . ' hours'));
$value = date('h:i A', strtotime(date('Y-m-d') . ' + ' . $h . ' hours'));
$formatter[$key] = $value;
$h++;
}
結果是:
Array
(
[00:00] => 12:00 AM
[01:00] => 01:00 AM
[02:00] => 02:00 AM
[03:00] => 03:00 AM
[04:00] => 04:00 AM
[05:00] => 05:00 AM
[06:00] => 06:00 AM
[07:00] => 07:00 AM
[08:00] => 08:00 AM
[09:00] => 09:00 AM
[10:00] => 10:00 AM
[11:00] => 11:00 AM
[12:00] => 12:00 PM
[13:00] => 01:00 PM
[14:00] => 02:00 PM
[15:00] => 03:00 PM
[16:00] => 04:00 PM
[17:00] => 05:00 PM
[18:00] => 06:00 PM
[19:00] => 07:00 PM
[20:00] => 08:00 PM
[21:00] => 09:00 PM
[22:00] => 10:00 PM
[23:00] => 11:00 PM
)
0
這裏有一個更靈活的版本,不需要日期時間(因爲我們已經與時間戳以秒爲工作反正)。 ;-)
function get_hours_range($start = 0, $end = 86400, $step = 3600, $format = 'g:i a') {
$times = array();
foreach (range($start, $end, $step) as $timestamp) {
$hour_mins = gmdate('H:i', $timestamp);
if (! empty($format))
$times[$hour_mins] = gmdate($format, $timestamp);
else $times[$hour_mins] = $hour_mins;
}
return $times;
}
0
這裏是我的建議:
$start = new \DateTime('00:00');
$times = 24 * 2; // 24 hours * 30 mins in an hour
for ($i = 0; $i < $times-1; $i++) {
$result[] = $start->add(new \DateInterval('PT30M'))->format('H:i A');
}
print_r($result);
希望這有助於。
相關問題
- 1. 如何在sql中顯示半小時和小時間隔的時間
- 2. zeroclipboard工作時間的一半時間
- 3. Android - 24小時工作時間間隔
- 4. 如何在jQuery中以半個小時的時間間隔在選擇框中獲取時間
- 5. 在一系列時間間隔中搜索當前時間
- 6. 如何將時間四捨五入到最近的四分之一和半小時的時間間隔?
- 7. MySQL - 從時間戳列中選擇每隔2小時的時間間隔
- 8. 在mysql中以1小時爲間隔的開始時間和結束時間之間的分隔時間
- 9. 對於半小時的時間間隔,我可以使用Pandas TimeDeltaIndex,PeriodIndex或DateTimeIndex?
- 10. 如何將時間範圍/時間間隔分爲多個分箱間隔發生的時間間隔
- 11. Flash遊戲計時器時間間隔變爲一半
- 12. 以30分鐘的時間間隔創建時間序列
- 13. Python組以時間間隔
- 14. 如何安排以多個時間間隔運行的作業
- 15. 以半個小時爲間隔計算電話號碼
- 16. 2100小時+1分鐘作爲計時器。時間間隔
- 17. 時間間隔
- 18. 如何按時間間隔(OHLC條)時間序列與LINQ
- 19. ASP.NET MVC3如何使用定時器以一小時間隔
- 20. 的時間間隔
- 21. 轉換的時間間隔爲在SQL Server十進制小時
- 22. R中的每小時時間系列
- 23. R中小時間隔的總時間列
- 24. 獲得兩個時間之間的時間(一小時)
- 25. 在一定時間間隔
- 26. 如何在時間序列中插入間隔以便結果時間序列中沒有間隔?
- 27. 一個特定的時間間隔
- 28. 如何統計一段時間(日期時間和日期時間)字段中每半小時的記錄數?
- 29. 轉換一列時間戳或日期時間和查詢時間間隔
- 30. 集團在日期時間熊貓爲三個小時的時間間隔
不錯的解決方案!我認爲它需要PHP 5.3的函數分配給一個變量? +1(不要擔心重新開放,如果我知道你在努力解決問題,我永遠不會刪除它)。 – alex 2010-10-11 23:22:31