不論是用手算或工具,找出任意日期是星期幾的最快方法,是把該日期對應到一個已知的星期基準日,然後以符合曆法的方式向前計算。末日演算法等心算技巧能讓熟練的使用者在大約三十秒內得出星期一至星期日的答案,而免費的星期幾計算機則在你選好日期的那一刻就回傳相同的答案,不需要數學運算、不需要記誦,也不需要按任何按鈕。兩種方法都奠基於相同的曆法事實:哪些年份是閏年、日數在世紀間如何偏移,以及 365 天的週期加上偶爾多出的一天,如何讓每年的星期幾產生變化。末日演算法由數學家 John Conway 推廣而普及,運作方式是記住每個世紀的一組小型基準日,再對世紀內的年份與年內的月份加上偏移量。計算機則跳過上述所有步驟,直接從 UTC 曆法基準讀出星期幾,再以 Zeller 同餘公式(經典的星期幾公式)交叉驗算結果,因此兩種方法在 1800 年代到 2100 年甚至更之後的每個日期上都能達成一致。

how to calculate day of the week in your head
how to calculate day of the week in your head

星期幾的心算技巧

想在手邊沒有日曆的情況下知道某個日期是星期幾的讀者,有幾種心算方式可以選擇。每種方式都是以記憶換取速度,並且都依賴同一組曆法事實:365 天的週期、閏年偶爾多出的一天,以及每個世紀少數幾個好記的基準日。

下表比較了最常見的選項,方便你挑選最符合情境的方法。

方法需要記住的內容適用情境所需時間
末日演算法每個世紀一個基準星期,以及月份助記法任何世紀的任意日期大約 30 秒
Zeller 同餘公式公式本身紙筆運算或計算機1 到 2 分鐘
年初日累計法最近幾個 1 月 1 日的星期接近基準的平年不一定
星期幾計算機任何過去或未來的日期瞬間完成

心算在以下幾個地方總是會出錯:1 月下旬與 2 月的閏年、1900、2000、2100 等世紀交界處,以及距離任何已記住的基準日數十年之久的日期。其中任何一步稍微出錯,就會讓答案差一兩天,這也是為什麼大多數人最終會選擇用工具,而不是相信自己的算術。

如何使用星期幾計算機

若想要一個不需要計算的驗證答案,星期幾計算機是最快的途徑。它在瀏覽器中執行運算,在你選好日期的那一刻就顯示星期,沒有任何需要記住的東西,結果也不必再懷疑。

  1. 在日期欄位中選擇任意日期。預設為今天的日期,你可以選擇非常久遠的過去或未來,包括 1800 年代以及 2100 年和之後的日期。
  2. 在欄位下方立即讀取星期一至星期日的星期幾。沒有任何按鈕要按;日期一設定好,答案就會出現。
  3. 查看答案附帶的額外資訊:該日期距今幾天、該日期是過去還是未來,以及它是否落在週末。
  4. 把星期幾與完整日期直接複製到筆記、日曆行程或訊息中。兩者會以白話並排顯示,無需註冊,也沒有用次數限制。

舉例來說,在欄位中選擇 July 20, 1969 會回傳星期日,這與阿波羅 11 號登月當天的紀錄一致。選擇 January 1, 1970 會回傳星期四,這與 Unix 紀元一致。選擇 February 29, 2024 會回傳星期四,無需自行運算就能確認 2024 年閏日的星期幾。

末日演算法的實務應用

末日演算法是最接近真正「用心算」的方法,因為每個步驟都可化為簡單的加法與一兩個記住的基準。其結構分為三層:世紀基準日、年份偏移量,以及月份基準日。

三個步驟詳解

步驟一,世紀基準日。每個百年區塊有一個基準星期,也就是該年度末日落在星期幾:

  • 1800 年代,星期五
  • 1900 年代,星期三
  • 2000 年代,星期二
  • 2100 年代,星期日

步驟二,年份偏移量。對世紀內的某一年,計算 a = year / 12、b = year mod 12,以及 c = b / 4,皆以整數除法進行。接著年份偏移量為 (a + b + c) mod 7,得出需加到世紀基準日上以抵達該年度末日的天數。

步驟三,月份基準日。從該年度的末日出發,憑藉一組少量記住的日期向前計算到目標日:

  • 偶數月份落在與日數相同的日期:4/4、6/6、8/8、10/10 以及 12/12
  • 奇數月份:5/9、9/5、7/11 以及 11/7
  • 1 月:平年為 1/3,閏年為 1/4
  • 2 月:平年為 2/28,閏年為 2/29

範例演練:February 29, 2024

把三個步驟套用在一個能由工具驗證的閏日日期上。

  • 步驟一:2024 落在 2000 年代,因此世紀基準日為星期二。
  • 步驟二:a = 24 / 12 = 2,b = 24 mod 12 = 0,c = 0 / 4 = 0。年份偏移量 = (2 + 0 + 0) mod 7 = 2。因此 2024 的末日 = 星期二 + 2 = 星期四。
  • 步驟三:閏年的 February 29 本身就是末日,因此 February 29, 2024 = 星期四。

星期幾計算機同樣回傳星期四,因此心算與工具的結果一致。

閏年、世紀與曆法的特殊之處

大多數星期幾的錯誤來自於閏年計算錯誤。格雷果里曆規則簡單但容易遺忘:

  • 可被 4 整除的年份為閏年。
  • 但世紀年必須同時可被 400 整除才是閏年。

這就是為什麼 1900 與 2100 不是閏年,儘管兩者皆可被 4 整除,而 2000 是閏年,因為它可被 400 整除。February 29, 2024 落在星期四是因為 2024 通過四年規則的檢驗;February 29, 1900 與 February 29, 2100 根本不存在。下表列出幾個廣為人知的參考日期。任何星期幾工具或心算方法都應回傳與表中相同的星期。

日期事件星期
January 1, 1970Unix 紀元星期四
July 20, 1969阿波羅 11 號登月星期日
January 1, 2000Y2K 里程碑星期六
February 29, 2024最近的閏日星期四

星期幾計算機套用完整的格雷果里曆規則,並在所有日期上採用延伸格雷果里曆,因此上表每一列的星期都與工具輸出吻合。它同時防範常見的兩位數年份錯誤,避免腳本把 50 這個年份誤判為 1950 而非 2050,因此早期的日期不會悄悄被翻進錯誤的世紀。

計算機勝過心算的時機

心算在處理單一日期時很優雅,但有幾個實際情境讓工具成為更佳選擇。

  • 遠離任何基準的歷史日期。1700 年代或 1500 年代的日期會讓世紀基準超出舒適範圍,加上細微的心算誤差會在偏移量上累積放大。
  • 未來規劃。挑選婚禮日期、發票到期日或專案截止日時,立即知道該日期是否落在週末,而不必把演算法跑兩次,這種好處很實用。
  • 機密或私人的日期。出生日期與合約截止日經常需要在共用電腦上快速查詢。計算機完全在你的瀏覽器中執行,因此你輸入的日期從不離開你的裝置,也不會被上傳或儲存。
  • 驗證心算答案。即使是經驗豐富的末日演算法使用者,也會在將結果用於排程或書面文件前,用工具再核對一次。

工具會把星期幾與完整的書面日期並排顯示,因此答案可以輕鬆複製到日曆行程或訊息中,無需自己重新輸入日期。沒有註冊流程,也沒有查詢次數上限,你可以對同一個日期反覆檢查,直到自己滿意為止。若有相關問題,例如對日期加上或減去時間、依出生日期計算精確年齡,或查看某個日期落在一年中的第幾天,可以把這個計算機搭配對應的一年中的第幾天計算機使用。

延伸閱讀:精確年齡計算機:年、月、日

延伸閱讀:星期幾計算機:經參照驗證的準確度