ToolAct工具行動

工作日計算器

計算日期範圍內的實際工作日數量

工作日計算

什麼是工作日計算器?

工作日計算器用來統計一段日期範圍內真正可用的工作天數,會依選擇的週末規則與手動輸入的假日天數扣除。它適合專案交付估算、請假天數核對、薪資結算、帳期安排、招募流程與合約週期估算。工作日不同於自然日:週六週日休息、週五週六休息、地區國定假日、公司統一休假、補班日與調休日都可能影響答案。此工具提供的是根據輸入條件得到的快速排程估算,不會自動識別各地假日表。若用於人資、法律、財務或正式合約,仍應對照官方日曆與公司制度複核。

使用方式

使用方式

  1. 輸入開始日期和結束日期
  2. 選擇排除週末的選項(週六至週日 / 週五至週六 / 無)
  3. 輸入國定假日天數(選填)
  4. 點選「Calculate workdays」以查看結果

行事曆假設

  • 計算前請先設定週末規則;週五至週六、週六至週日及無週末的行事曆會產生不同的總天數。
  • 若要排除國定假日和公司停業日,請另外輸入。

使用場景

估算兩個日期之間的實際工作產能選擇包含起訖日期後,計算總天數、週末天數、手動輸入的假日天數和剩餘工作日。結果適合用於粗略的衝刺產能、交付規劃、入職窗口和 SLA 討論,在進行完整行事曆審查之前作為快速參考。
根據地區或團隊排程調整週末規則選擇週六/週日、週五/週六或不排除週末,而非假設全球統一的工作週。這讓計算對分散式團隊、跨境供應商和使用非標準行事曆的營運更有用。
驗證請假、採購和交接時程輸入已知的國定假日天數以從工作日總數中扣除,然後將結果作為規劃檢查點。工具不知道當地假日日期、補班日、半天假或公司特定的停業日,因此最終截止日期仍需對照官方行事曆。中國式排程還包含調休(將正常週末變為工作日的週六或週日),這些不會自動翻轉——頁面只看到週末模式和假日天數,因此春節調休週必須手動在假日欄位中反映或調整週末規則。
以不同假日天數重新計算同一範圍以比較情境將假日輸入從 0 切換到 5、10 或 15 並重新計算,以觀察排程的激進或保守程度。視覺差異在向對範圍內公共假日有不同認知的利害關係人捍衛截止日期時很有用。對西方行事曆而言,聯邦假日列表(新年、馬丁路德紀念日、總統日、陣亡將士紀念日、六月節、獨立日、勞動節、哥倫布日/原住民日、退伍軍人節、感恩節、聖誕節)通常每年貢獻 10-11 個工作日,OPM 會提前公布 2025-2027 年的列表,可直接查詢天數。
將工作日答案轉換回行事曆日期將結果作為相關日期運算工具的輸入,將工作日數加到已知的起始日期上並使用相同的週末規則。這會給出一個預計結束日期,可以直接放入 Jira、SLA 欄位或招募面試邀請中,無需重新輸入週末模式。

技術原理

工作日數量是指包含起訖日在內的 `[start, end]` 範圍中,既非週末也非假日的日曆天數。標準的含端點公式為 `total_days = (end - start) / 86_400_000 + 1`(前提是兩個邊界皆已正規化至 UTC 午夜),然後再扣除週末和假日天數。星期幾的判斷來自 `Date.prototype.getDay()`,該方法傳回 `0`(週日)到 `6`(週六)——需要注意一個常見陷阱:`getDay()` 並非 `getDate()`,且結果取決於瀏覽器的本地時區,因此跨越午夜的 UTC 日期字串可能落在與預期不同的星期。 週末模式因地區而異:全球預設為週六至週日(西方國家、印度、大部分亞洲),但中東地區歷史上曾採用週四至週五,截至 2024 年大多數海灣國家(阿聯酋、巴林、科威特、卡達)已調整為週五至週六,甚至週六至週日搭配半天週五。伊朗、阿富汗及部分南亞地區僅放週五;以色列則為週五至週六。工具提供週六至週日、週五至週日及「無」三種常見預設,讓假日天數透過減法來涵蓋其他情況。 計數演算法有兩種實際實作方式。簡單迭代法逐日走訪:`for (let d = start; d <= end; d.setDate(d.getDate()+1)) if (![0,6].includes(d.getDay())) count++`,時間複雜度為日曆天數 O(n),易於閱讀。封閉形式的替代方案計算 `full_weeks * 5 + partial_week_workdays`,時間複雜度為 O(1),在跨多年範圍時更具優勢。落在週末的假日不應被重複扣除,因此標準做法是以 `holidays.filter(h => !isWeekend(h)).length` 過濾假日集合。中國的調休政策增加了純週末模式無法表達的特殊情況:國務院每年公布一份將特定週六或週日轉為工作日的清單,以補償春節或國慶的延長假期,因此中國行事曆的假日清單必須搭配明確的「補班日」清單,而非僅依賴星期幾的規則。

  • 含端點公式:`total_days = (end - start) / 86_400_000 + 1`,兩個日期皆正規化至 UTC 午夜以避免夏令時間偏移。
  • `Date.prototype.getDay()` 傳回 0(週日)到 6(週六),結果取決於瀏覽器的本地時區——並非 UTC,因此涉及时區敏感的程式碼應使用 `getUTCDay()`。
  • 週末預設:週六至週日(西方國家、印度、大部分亞洲)、週五至週日(大多數海灣國家,2006-2013 年起)、僅週五(伊朗)、無(全天候營運)。
  • O(1) 封閉形式:`full_weeks * 5 + extra_workdays_in_partial_week`;在跨多年範圍時優於逐日迭代。
  • 落在週末的假日不得重複計算:扣除 `holidays.filter(h => !isWeekend(h)).length`,而非原始假日天數。
  • 中國國務院調休:特定週六/週日成為法定工作日以補償延長假期;需要明確的補班日清單。
  • 美國聯邦假日(依據 5 U.S.C. § 6103)每年貢獻 11 個工作日:新年、馬丁路德紀念日、總統日、陣亡將士紀念日、六月節、獨立日、勞動節、哥倫布日、退伍軍人節、感恩節、聖誕節。

範例

2026 整年的工作日

起始日:  2026-01-01
結束日:  2026-12-31
週末:    週六與週日
假日:    13  (中國法定假日含調休)

總天數:    365
週末天數:  104
假日:      13
工作日:    248

兩週衝刺週期容量

起始日:  2026-06-15(週一)
結束日:  2026-06-26(週五)
週末:    週六與週日
假日:    0

總天數:    12
週末天數:  2
工作日:    10  (完整兩週衝刺,4 名工程師 => 40 工作日容量)

中東團隊以週五至週六為週末

起始日:  2026-09-01
結束日:  2026-09-30
週末:    週五與週六
假日:    1  (地區性假日)

總天數:    30
週末天數:  8   (9 月的週五與週六)
工作日:    21

公假後的到職培訓期

起始日:  2026-10-08  (黃金週後第一個工作日)
結束日:  2026-10-30
週末:    週六與週日
假日:    0

總天數:    23
週末天數:  6
工作日:    17  (足以安排 3 週的到職培訓計畫)

結合美國聯邦假日的 2027 Q1 規劃

起始日:  2027-01-01
結束日:  2027-03-31
週末:    週六與週日
假日:    4  (元旦、馬丁路德金恩日、總統日、耶穌受難日)

總天數:    90
週末天數:  26
工作日:    60

常見問題

工作日是怎麼計算的?

預設將週一至週五計入,跳過週六與週日。你在假日清單中指定的日期也會被排除。本頁會顯示總日曆天數、週末天數、假日天數,以及最終的工作日數。

會自動套用國定假日嗎?

不會,本工具不會自動載入國定假日,你需要手動輸入假日天數。請參考所在國家的官方行事曆以取得準確數字。

支援補班日(調休)嗎?

不支援。本工具只會排除週末與你輸入的假日天數,不會自動處理中國的「調休」或類似政策。如果你的行程包含補班日,請手動調整週末規則或假日天數。

可以只排除週末、不扣假日嗎?

可以。關閉假日清單後,計算就只排除週六與週日。你也可以自訂哪幾天算作週末,例如部分中東地區的週末是週五與週六。

這個工具和「日期差計算」有什麼不同?

日期差計算回傳的是日曆天數;本工具回傳的是工作日數,會跳過週末與假日。專案截止日、合約日期、SLA 時程請用本工具;要計算純粹經過時間請用日期差計算。

可以計算過去的日期嗎?

可以。任意兩個日期之間的工作日都能計算,過去或未來皆可。輸入起訖日期、選擇週末規則、填入假日天數,本頁就會算出該區間的總工作日數。

我的資料會被上傳嗎?

不會。所有計算都在你的瀏覽器中執行,假日天數與日期不會被儲存或傳送。