2014-11-04 26 views
1

從兩次(格式:H:i:s)中很容易地得到分鐘和秒數的差異,我從該網站上的另一個問題得到了該結果。時間差異的確切樣式(php)

我試着這樣說:

$start_date = new DateTime('04:10:58'); 
$since_start = $start_date->diff(new DateTime('10:25:00')); 
echo $since_start->h.':'; 
echo $since_start->i.':'; 
echo $since_start->s; 

但是,輸出:

6:14:2

我覺得不好看。我想它看起來像:06:14:02

我也想使用當前時間,而不是給定的時間,但與上面的代碼,不工作,我注意到。

$start_date = date("H:i:s"); 
$since_start = $start_date->diff(new DateTime('10:25:00')); 
echo $since_start->h.':'; 
echo $since_start->i.':'; 
echo $since_start->s; 

輸出:

Fatal error: Call to a member function diff() on a non-object

的兩次我有: 一個時間是當前時間:date("H:i:s"),另一種是$time0,其例如包含一個時間11:24:00(從數據庫) 。

+1

的問題是顯而易見的這段時間,但請張貼的,而不是說明你實際的PHP錯誤「給出了一個錯誤。」他們其實是指東西! – sjagr 2014-11-04 18:55:39

+1

對不起,當然你是對的!我再次懶惰... – PHPirate 2014-11-04 18:59:22

+0

我編輯了這個問題,我希望這是正確的做法。 PS我也不知道如何使用''''''''''''''''''''''''''謝謝您的提醒 – PHPirate 2014-11-04 19:05:34

回答

2

DateInterval的內部是格式化的,你應該使用DateInterval::format功能:

$start_date = new DateTime('04:10:58'); 
$since_start = $start_date->diff(new DateTime('10:25:00')); 
echo $since_start->format('%H:%I:%S'); 

對於第二個示例,您使用的是PHP的字符串(因爲date()返回一個字符串,而不是一個對象)並試圖對待它像DateTime對象,這就是爲什麼你會收到錯誤。而應該初始化一個空DateTime對象,將默認爲now

$start_date = new DateTime(); // or DateTime('now') 
$since_start = $start_date->diff(new DateTime('10:25:00')); 
echo $since_start->format('%H:%I:%S'); 

如果你開始從數據庫中$start_date值,讓我們說$time0,你可以直接傳遞到DateTime結構,這將需要在將其轉換爲正確DateTime對象的好刺:

$start_date = new DateTime($time0); 
$since_start = $start_date->diff(new DateTime('10:25:00')); 
echo $since_start->format('%H:%I:%S'); 
+0

我的問題都立即回答!你非常幫助解釋字符串和對象之間的區別。而當我嘗試過首都時,我錯過了那些%-signs,這是一個整潔的小竅門! – PHPirate 2014-11-04 19:01:26

+1

@PHPirate是的,'DateInterval'使用了一組完全不同的格式約定(你可以看看我提供的參考鏈接以查看更多信息。)儘管'DateTime'對象付出了很大的努力,但很多初學者都不喜歡不要以爲使用面向對象的方式,而是試着用'date'和'strtotime'來爭吵。祝你好運! – sjagr 2014-11-04 19:04:13