看板 PHP 關於我們 聯絡資訊
小弟建議從 SQL 下手, Database 撈出來再用 PHP 過濾, 感覺不會比較快 寫個 function 計算工作日如下: ===================== DELIMITER $$ CREATE FUNCTION business_day(from_date DATE, to_date DATE) RETURNS INT BEGIN DECLARE days, offset_days int; SET offset_days = CASE WHEN WEEKDAY(from_date) > 4 THEN 6 - WEEKDAY(from_date) ELSE 0 END + CASE WHEN WEEKDAY(to_date) > 4 THEN WEEKDAY(to_date) - 4 ELSE 0 END; SET days = DATEDIFF(to_date, from_date); RETURN days DIV 7 * 5 + days % 7 - offset_days; END $$ ===================== # 選出所有工作天 > 3 SELECT * FROM `table` WHERE business_day(from_date, to_date) > 3 希望對您有所幫助 ※ 引述《JYHuang (夏天到了,冷不起來了說)》之銘言: : ※ 引述《roga (任性)》之銘言: : : 因為耗時間才要交給機器做, : : 不過好的作法可以讓機器少耗一些時間就是了... : : 看你的資料的複雜度吧, : : 1. 只有日期,而且連續,那每七天扣掉兩天就是你的答案。 : 是連續的 : 要從撈出來的資料比對欄位B的日期 : 是否在欄位A日期+n天的區間內(排除六日) : 一開始打算直接在SQL Server做判斷的.. : 不過這樣SQL會落落長的落落長,而且加重SQL Server的Loading : 接著打算想試試能不能用數學式來推(用+-%..之類的) : 推不出來最後目前換成用data函數 : 1.先比對是否為同一週 (直接B-A) : 2.計算日期A距週六幾天 : 3.計算日期B距週日幾天 : 再做(相隔週數-1)*5 + (週六-A天數) + B距週日天數 : : 至於效能方面不用太擔心,這種計算不會很花時間 : : 以我的筆電,比對 10,000 次花 0.3 秒而已。 : 如果是數百筆,然後每一筆都逐日筆對的話 : 時間好像就不小了.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.64.54.125 ※ 編輯: evernever 來自: 115.64.54.125 (12/18 06:19)
MOONRAKER:贊 12/18 09:58
JYHuang:JYHuang與MOONRAKER都說這個贊 12/18 22:42
JYHuang:ㄟ....這個算法有誤喔.... 12/20 17:10