2013-12-13 61 views
13

我有一個接收時間值的一種形式:PHP增加15分鐘的時間價值

$selectedTime = $_REQUEST['time']; 

的時間是在這種格式 - 9:15:00 - 這是上午9:15。然後,我需要添加15分鐘,並存儲在一個單獨的變量,但我很難過。

我試圖使用的strtotime沒有成功,例如:

$endTime = strtotime("+15 minutes",strtotime($selectedTime))); 

但不會解析。

+0

'strtotime'將日期轉換爲時間戳。 '9:15:00'不是日期。只需手動分割並添加15分鐘 – zerkms

+0

可能的重複http://stackoverflow.com/questions/8169139/adding-minutes-to-date-time-in-php? – Charlie74

+1

@ Charlie74:其實不是。這是一個有效的日期,只有在這裏 – zerkms

回答

40

您的代碼不工作(解析),因爲你在使一個解析錯誤末有一個額外的)。伯爵,你有2 (和3 )。如果你解決這個問題,它會工作正常,但strtotime()返回一個時間戳,所以得到一個人類可讀的時間使用date()

$selectedTime = "9:15:00"; 
$endTime = strtotime("+15 minutes", strtotime($selectedTime)); 
echo date('h:i:s', $endTime); 

獲取一個編輯器,將語法高亮顯示,並顯示無與倫比的括號,括號等

只是做直時間沒有任何TZ或DST,並添加15分鐘(讀zerkms評論):

$endTime = strtotime($selectedTime) + 900; //900 = 15 min X 60 sec 

不過,)是這裏的主要問題。

+0

與另一個答案相同的問題 - 如果通過移位的時間過去了,它將在夏令時時間內失敗 – zerkms

+0

@zerkms:這就是使用'strtotime()'的原因,因爲它需要考慮DST,與添加不同。大多數時候你想考慮DST。取決於要求。 – AbraCadaver

+0

你不能只考慮'DST'的時間。時間字符串不是日期,所以您無法確定在這種情況下是否需要應用DST。 – zerkms

8

雖然你可以通過PHP的時間函數來完成這個任務,但是讓我們爲你介紹一下PHP的DateTime類,它和相關的類一起,真的應該放在任何PHP開發人員的工具箱中。

// note this will set to today's current date since you are not specifying it in your passed parameter. This probably doesn't matter if you are just going to add time to it. 
$datetime = DateTime::createFromFormat('g:i:s', $selectedTime); 
$datetime->modify('+15 minutes'); 
echo $datetime->format('g:i:s'); 

請注意,如果你在找什麼做的基本上是提供了12或24小時時鐘的功能,你可以加/減時間,不真正關心的日期,所以要消除可能的問題圍繞節能一大跳時代變遷的這樣,我建議以下格式之一:

!g:i:s 12小時制,沒有時間上的前導零

!G:i:s 12小時格式與領先的零

請注意格式中的!項目。這將日期組件設置爲Linux的劃時代的第一天(1970年1月1日)

+0

「如果你只是想增加時間,這可能沒有關係」---夏天呢? – zerkms

+0

假設現在是2013年9月29日:http://ideone.com/siPvIk – zerkms

+0

@zerkms我想這是如何處理的確實取決於OP的需求。如果您只是嚴格尋找12小時的時間添加功能(即您不想考慮夏令時變化),則可以使格式爲'!g:i:s'來始終將日期設置爲紀元時間( 1-1-1970),所以你沒有這樣的擔憂。 –

0

要在以前的答案擴大,一個函數來做到這可能是工作像這樣(改變時間和間隔格式,只要你喜歡他們根據this for function.datethis for DateInterval):

(我也寫一個alternate form of the below function here

// Return adjusted time. 

function addMinutesToTime($time, $plusMinutes) { 

    $time = DateTime::createFromFormat('g:i:s', $time); 
    $time->add(new DateInterval('PT' . ((integer) $plusMinutes) . 'M')); 
    $newTime = $time->format('g:i:s'); 

    return $newTime; 
} 

$adjustedTime = addMinutesToTime('9:15:00', 15); 

echo '<h1>Adjusted Time: ' . $adjustedTime . '</h1>' . PHP_EOL . PHP_EOL; 
0

你也可以使用下面的代碼。它很簡單。

$selectedTime = "9:15:00"; 
echo date('h:i:s',strtotime($selectedTime . ' +15 minutes'));