2016-01-05 102 views
2

我有一個應用程序,它在登錄記錄的時間和註銷記錄的時間。Laravel 5時差

我的表具有的In_time & Out_time的那些列中的數據的

實施例:

的In_time = 16時06分46秒

Out_time的= 16時08分07秒

我有一個控制器可以讓我的刀片模板文件顯示給定人員的所有信息,我想要做的是顯示兩者之間的時間差異。

見下面我當前的代碼目前顯示爲0

**Time onsite:** {{ date('G:i', strtotime($attrec->out_time)) - date('G:i', strtotime($attrec->in_time)) }} 

是否有一個原因,我不能得到正確的數字?

+0

研究碳,這已經建成laravel:http://carbon.nesbot.com/docs/#api-humandiff – aynber

+0

雖然我可以在我看來使用碳? –

+1

@Wolrab當然可以。 – Bogdan

回答

4

您正在將時間戳轉換爲格式化字符串並嘗試計算字符串之間的差異。相反,你應該計算每個datetotime過導致的結果(返回UNIX時間戳本質上屬於秒),然後格式之間的區別:

{{ date('G:i', strtotime($attrec->out_time) - strtotime($attrec->in_time)) }} 

您也可以通過執行使用Carbon如下:

{{ (new Carbon($attrec->out_time))->diff(new Carbon($attrec->in_time))->format('%h:%I') }} 

它使用從DateTime繼承的方法diff,它返回一個DateInterval實例。 DateInterval::format的格式化字符與date使用的格式字符不同。這就是爲什麼格式化字符串是%h:%I,這相當於G:i

上面的代碼將輸出:

0:01 

因爲你選擇了沒有前導零格式化小時,兩個時間戳之間的差異是一分鐘(和未示出的,因爲他們是一些備用秒不包含在格式化字符串中)。

+0

Thanks @bogdan,CARBON新手!我試過你是方法,但我得到語法錯誤,意外的')',期待','或';' –

+0

最後可能是'''',試試刪除 – camelCase

+0

對不起,解決了那個:)我認爲這個技巧完美無缺!謝謝 –

0

我可能是錯的,但它的算術運算可能未定義在date的輸出上。我對PHP並不熟悉,但bash會將數值「0」應用於任何不是您嘗試添加的數字的內容。所以,如果你沒有

"hello" + 5 

你會得到5。在這種情況下,你有評價結果爲0給0 + 0 = 0

有在PHP解決時間算術問題Here兩個對象。希望這會讓你成爲實現你想要的最好方式!