2011-05-05 29 views
1

這似乎是一個相當簡單的問題,但我遇到了麻煩!在PHP中扣除兩個不同時間

在我的數據庫中,我有兩個有時間的領域。假設一個名爲clockin的字段的內容是「2:29:39 pm」,另一個字段名爲clockout的內容是「2:29:39 pm」。

然後我有兩個其他領域,其中一個名爲「breakin」,其中的內容是2:28:37 pm,突破內容是「2:28:55 pm」。

我想從break in中減去breakout來獲得差異,然後取這個數字並從clockin和clockout之間的差值中減去它。

我該怎麼做?這是我試過的:

$clockout = new DateTime($row['clockout']); 
$clockin = new DateTime($row['clockin']); 



$diff = $clockout->diff($clockin); 

$on_the_clock = sprintf('%d hours, %d minutes, %d seconds', $diff->h, $diff->i, $diff->s); 


$breakin = new DateTime($row['breakin']); 
$breakout = new DateTime($row['breakout']); 

$diff2 = $breakout->diff($breakin); 
$break = sprintf('%d hours, %d minutes, %d seconds', $diff2->h, $diff2->i, $diff2->s); 

這給了我兩個區別,但我不知道如何從另一箇中減去一個。

感謝您的幫助!

回答

2

根據您現有的代碼判斷,我假設您的運行PHP> 5.3與DateTime類。

在這種情況下退房DateTime->sub()。您可以使用它來減去從中斷中返回的DateInterval時鐘輸出。然後做時鐘之間的時鐘輸出。那會給你工作的總時間。

+0

嗯。我仍然對此感到困惑。我在代碼中已經這樣做了,以創建兩個時間差異,但是我不確定如何區分這些差異。 :s – 2011-05-05 02:21:34

+0

我已經用一些額外的說明更新了我的答案。 – 2011-05-05 02:22:34

+0

你可能會告訴我示例代碼嗎?我似乎無法解決這個問題。 :\ – 2011-05-05 02:43:57

1

我已經使用strtotime()來解決這些問題。它以Unix時間戳的形式產生純數值。我沒有使用DateTime()的經驗,但我更喜歡Unix時間戳,因爲它表示秒數,如果需要可以使用date()將其轉換回字符串或用戶友好格式。

我發現在數據庫中存儲Unix時間戳也更容易操作。在需要向用戶顯示之前,用戶友好的格式不是必需的。

[http://php.net/manual/en/function.strtotime.php] [1]