2016-09-16 58 views
1

我試圖從00:00到24:00得到一個時間增量列表的選擇框。PHP活動預訂:以30分鐘爲增量獲取時間爲1小時

時間增量是秒的關聯數組到顯示時間是這樣的:

1800 => 00:30

然後,當有人選擇的日期,我打算將日期轉換(例如2016/9/16)轉換爲秒,然後將他們選擇的時間添加到這些秒以獲取其事件的日期時間。

爲此,我正在生成像這樣的時間增量。

public function getIntervals($start_time = '00:00', $end_time = '24:00', $increments = '30') 
{ 
    $today = strtotime(date('Y/m/d', time())); // seconds for 2016/9/16 

    $seconds_start = strtotime(date('Y/m/d', time()) . ' ' . $start_time) - $today; 
    $seconds_end = strtotime(date('Y/m/d', time()) . ' ' . $end_time) - $today; 

    while ($seconds_start < $seconds_end) { 
     $intervals[$seconds_start] = date("H:i", $seconds_start); 
     $seconds_start = strtotime('+' . $increments . ' minutes', $seconds_start); 
    } 
    return $intervals; 
} 

但是我的時間間隔是一個小時。

enter image description here

如果某人在早上2016年9月17日在01:00'中的在上午01:00秒的值選擇爲「」。

如果我添加 '' 到strtoseconds( '2016年9月17日'),我會 '在00:00 2016年9月17日' 得到的。

所以我在這裏,一個小時了。我認爲這是由於我的服務器時間設置爲巴黎+ 1小時,但我不知道如何解決它。

+0

而不是'date(「H:i」,$ seconds_start);'try'date(「H:i」,$ today + $ seconds_start) ;' –

+2

基本經驗法則:如果你正在做日期數學計算,並且結果總是出現60倍的精確倍數,那幾乎總是一個時區問題 –

回答

1
$timediff = 3600; 

$paris_00_time = strtotime(date('Y-m-d '.'00:00')); 

$paris_selected_time = $paris_00_time+1800; 

$my_time = date('Y-m-d H:i:s',$paris_selected_time-$timediff); 

print_r($my_time); 

你可以聲明$timediff=3600;(1小時)

$paris_00_time = strtotime(date('Y-m-d '.'00:00'));

後,有人選擇日期(例如:[1800] => 00:30),並提交您可以處理日期

$paris_selected_time = $paris_00_time+1800;

$my_time = date('Y-m-d H:i:s',$paris_selected_time-$timediff);

輸出:2016-09-15 23:30:00

1

我真的不記得在哪裏,但你可以改變你的時區。通過PHP時區搜索,您將從官方網站上找到所有可能的國家/城市的列表。你只需要爲你需要的國家/城市設置一個變量,就是這樣。我不知道您是否可以在您的PHP腳本中執行此操作,或者需要更改服務器中的配置文件。

+0

下面是你的答案缺失的鏈接。 http://php.net/manual/en/function.date-default-timezone-set.php,http://php.net/manual/en/timezones.php – chris85