2010-01-26 109 views
7

我們運行基於2個工作日SLA的服務,因此如果請求在週一下午1點提交,則應在週三下午1點之前完成。PHP計算兩個日期之間的辦公時間數

因此,在數據庫中,我有兩個MySQL時間戳YYYY/MM/DD HH:MM:SS,並且需要一些方法來計算工作時間內兩個日期之間的時間,以辦公時間爲上午9點至下午5點。

任何人都可以給我任何想法嗎?

回答

0

總體而言,鑑於時間戳A和B,其中A爲開始時間:

  • 確定A和B之間的天數(也有簡單的方法可以做到這一點),調用此d
  • 如果時間戳B的HH:MM:SS大於或等於A,那麼添加時間差H,給出D(天)+ H(時間)
  • 如果HH:MM:SS用於時間戳B小於A的值,從D中減去1並加上8小時減去時間差H,得到D-1(天)+8(小時) - H

在你的例子中,如果A是星期一下午1點,B是星期三下午1點,那麼D是2.由於時間相同,H爲0,所以總差值爲2個工作日。

如果B是星期三下午3點,那麼總差值爲2天加2小時。

如果B是星期三上午9點,那麼總差值將是1天加4小時。

上述方法不處理週末或節假日,因此您必須進行適當的修改。

1

最簡單的方法是將表格存儲到數據庫中,每天一行,包含當天可用的工作時間。這使您能夠以較高的粒度處理節假日和週末,並且可以通過在用戶指定的兩個日期之間的天數上運行總和來獲得可用的時間量。

0

僅通過SQL來創建它是一件困難的事情。在MySQL時間戳之間的差異可以計算出這樣...

SELECT TIMESTAMPDIFF(HOUR,T.ts2,T.ts1) 
FROM test AS T; 

...但OFC不採取任何辦公時間考慮。

請記住,SQL 不知道你的辦公時間,這些也可以依賴於其他因素(週末,銀行假期或其他)。爲了做到這一點,你必須先設置一個日曆表,然後開始計算。

幾年前,我有一個類似的問題,在那裏我使用了一個後臺腳本,我在其中定義了時間和假日。然後,我在計算未來時間戳的同時插入數據,這更容易,更靈活。

相關問題