2012-10-05 49 views
1

說我有以下的字符串:減去時間字符串在PHP

$的timeleft = 0點02分30秒

我希望能夠減去1秒,把它變成00:02: 29。

我試過

$ timeLeft - 1;

但它什麼也沒做。

我該如何做到這一點,我可以從字符串中減去秒?

回答

4

需要將其轉換爲時間,減去1秒,重新格式化,例如:

$timeLeft = '00:02:30'; 
$time = DateTime::createFromFormat('H:i:s', $timeLeft); 
$time->sub(new DateInterval('PT1S')); 
$timeLeft = $time->format('H:i:s'); 

下面是通過將時間分成秒的情況下,PHP執行轉換「手動」髒代碼5.3+不可用。它肯定會不合適,減去的秒數大於總數。

$timeLeft = '00:02:30'; 
list($hours, $minutes, $seconds) = explode(':', $timeLeft); 
$seconds += $hours*3600 + $minutes*60; 
unset($hours, $minutes); 
$seconds -= 1; //subtraction 
$hours = floor($seconds/3600); 
$seconds %= 3600; 
$minutes = floor($seconds/60); 
$seconds %= 60; 
$timeLeft = sprintf("%'02u:%'02u:%'02u", $hours, $minutes, $seconds); 
+0

我得到這個致命錯誤:調用未定義的方法的DateTime :: createFromFormat()在/ home第17行的/aleckaza/public_html/tests/penny_auction/functions.php – Alec

+0

它需要PHP 5.3+。我敢打賭,你的PHP版本太舊了。請注意,最早支持的版本是5.3.17。 – Bugs

+0

如何在舊的PHP上執行此操作? – Alec

1

使用strtotime是一個很好的實用的解決方案,但你必須注意DST更改:

$tz = date_default_timezone_get(); // save old timezone 
date_default_timezone_set('UTC'); // switch to UTC 

echo date('H:i:s', strtotime($timeleft) - 1); // perform calculation 

date_default_timezone_set($tz); // restore old setting 
+0

爲什麼我需要留意時區?我所做的只是減去一秒鐘的固定時間。 – Alec

+0

@Alec:由於「strtotime」的工作方式:它解析完整的日期/時間並給出一個時間戳,它對應於特定的時間。使用它來解析你的輸入(這不是一個特定的時間,而是一個持續時間)並不是它的目的。你可以調整它,但你必須說明它應該如何工作。 – Jon