第一個問題。要溫柔。將時間範圍切片成部分
我正在研究跟蹤技術人員在任務上花費的時間的軟件。該軟件需要增強,以便根據一週中的某一天和一天中的時間識別不同的計費率乘數。 (例如,「工作日下午5點以後的一個半時間」。)
使用該軟件的技術只需要記錄日期,開始時間和停止時間(以小時和分鐘爲單位)。預計該軟件將在時間乘數變化的邊界處將時間分解成部分。一次性條目不允許跨越多天。
以下是匯率表的部分示例。顯然,第一級數組鍵是一週中的幾天。第二級數組鍵表示新乘數開始運行的那一天的時間,並且直到數組中的下一個順序入口爲止。數組值是該時間範圍的乘數。
[rateTable] => Array
(
[Monday] => Array
(
[00:00:00] => 1.5
[08:00:00] => 1
[17:00:00] => 1.5
[23:59:59] => 1
)
[Tuesday] => Array
(
[00:00:00] => 1.5
[08:00:00] => 1
[17:00:00] => 1.5
[23:59:59] => 1
)
...
)
用簡單的英語,這代表從午夜時間和半速率至8日凌晨,定期利率從8到下午5點,時間和半再次從5至11:下午59點。這些休息發生的時間可能對第二次是任意的,並且每天可以有任意數量的休息。 (此格式完全可以協商,但我的目標是儘可能使其儘可能容易閱讀)。
舉例:在星期一從15:00:00(下午3點) 21:00:00(晚上9點)將包括2小時收費1x和4小時收費1.5倍。單個時間條目也可能跨越多箇中斷。使用上面的示例rateTable,從上午6點到下午9點的時間條目將具有從6-8 AM @ 1.5x,8AM-5PM @ 1x和5-9PM @ 1.5x的3個子範圍。相比之下,時間條目也可能只是從08:15:00到08:30:00,並且完全包含在單個乘數的範圍內。
我真的可以使用一些幫助編碼一些PHP(或至少設計一個算法),可以採取一週的一天,開始時間和停止時間,並解析到所需的子部分。將輸出作爲包含多個入口(起始,停止,乘數)三元組的數組是理想的。對於上面的例子中,輸出將是:
[output] => Array
(
[0] => Array
(
[start] => 15:00:00
[stop] => 17:00:00
[multiplier] => 1
)
[1] => Array
(
[start] => 17:00:00
[stop] => 21:00:00
[multiplier] => 1.5
)
)
我只是簡單不能完成我的頭圍繞分割的單個的邏輯(開始,停止)代入(潛在地)多個子部分。
+1爲優秀的描述和措辭。 – JYelton 2010-05-07 22:35:01
+1問了關於SO的第一個問題。給它一些時間,一些好的答案會來。 – webbiedave 2010-05-07 22:53:32
什麼是合適的方式將這些答案中的一部分合併到我最終實際使用的內容中?我應該自己發表一個答案嗎?編輯問題?這兩者中的哪一個甚至是值得的,還是這個問題與沒有「最終」解決方案一樣有用?我不想(可能)從**實際上解決了我的問題的人那裏接受了投票。 – beporter 2010-05-10 14:12:35