モジュール:Weekday
表示
モジュールの解説[作成]
require('strict')
local p = {}
--[[--
ツェラーの公式を利用して西暦4年3月1日以降の曜日を求める。返される曜日は、ISO 8601に沿う。すなわち:
|--|---|
|日| 7 |
|月| 1 |
|火| 2 |
|水| 3 |
|木| 4 |
|金| 5 |
|土| 6 |
という対応が成り立つ。
--]]--
function p.weekday(y, m, d)
if m == 1 or m == 2 then
return p.weekday(y - 1, m + 12, d)
end
local Y = y % 100 -- y == 2021 -> Y == 21
local C = (y - Y) / 100 -- y == 2021 -> C == 20
local ga = 0
if 1582 <= y then
ga = -2 * C + math.floor(C / 4.0)
elseif 4 <= y then
ga = -C + 5
else
error("未対応の年が入力されました")
end
local h = d + math.floor(26 * (m + 1) / 10.0) + Y + math.floor(Y / 4.0) + ga
return (h % 7) + 1
end
return p