欢迎来到奇葩栖息地!欢迎加入Discord服务器:XfrfHCzfbW。请先至特殊:参数设置验证邮箱后再进行编辑。在特殊:参数设置挑选自己想要使用的小工具!不会编辑?请至这里学习Wikitext语法。
模块:Chinese calendar:修订间差异
来自奇葩栖息地
//Edit via InPageEdit
SkyEye FAST(讨论 | 贡献) 小 (SkyEye FAST移动页面模块:ChineseCalendar至模块:Chinese calendar,不留重定向) |
SkyEye FAST(讨论 | 贡献) (//Edit via InPageEdit) |
||
第221行:
-- 实现位运算函数
local function band(a, b)
if not a or not b then
return 0
end
-- Localize math.floor for performance
local result = 0
local bitval = 1
-- 处理负数或0的情况
if a <= 0 or b <= 0 then
return 0
end
while a > 0 and b > 0 do
第232行 ⟶ 第239行:
result = result + bitval
end
bitval = bitval * 2
a =
b =
end
return result
end
local function rshift(a, b)
if not a or not b then
return 0
end
if b < 0 then
return a
end
return math.floor(a / (2^b))
end
第248行 ⟶ 第266行:
-- 计算农历闰月月份
local function leapMonth(y)
if y < 1900 or y > 2100 then
return 0
▲ local index = y - 1900
end
if index < 0 or index >= #lunarInfo then return 0 end▼
-- Lua table index starts from 1
-- Lua table index starts from 1
return 0
end
return band(lunarInfo[index], 0xf)
end
第256行 ⟶ 第283行:
-- 计算农历闰月天数
local function leapDays(y)
if y < 1900 or y > 2100 then
return 0
end
local m = leapMonth(y)
▲ if m == 0 then return 0 end
if
return 0
end
-- Lua table index starts from 1
return 30
end
return 29
end
第267行 ⟶ 第303行:
-- 计算农历年天数
local function lYearDays(y)
if y < 1900 or y > 2100 then
return 0
end
local sum = 348
local i = 0x8000
-- Lua table index starts from 1
▲ local idx = y - 1900
-- Lua table index starts from 1
if idx <= 0 or idx > #lunarInfo then
return 0
end
while i > 0x8 do
第277行 ⟶ 第321行:
sum = sum + 1
end
i = rshift(i, 1)
end
return sum + leapDays(y)
end
第284行 ⟶ 第330行:
-- 计算农历月份天数
local function monthDays(y, m)
if y < 1900 or y > 2100 then
end
▲ if band(lunarInfo[y - 1900], rshift(0x10000, m)) ~= 0 then
if m > 12 or m < 1 then
return 0
end
-- Lua table index starts from 1
if band(lunarInfo[y - 1900 + 1], rshift(0x10000, m)) ~= 0 then
return 30
end
return 29
end
第296行 ⟶ 第350行:
-- 解析输入日期
local date = frame.args[1] or frame:getParent().args.date
if not date then return "日期参数错误" end▼
if not date then
end
local y, m, d = date:match("^(%d%d%d%d)-(%d%d?)-(%d%d?)$")
if not y or not m or not d then
return "日期格式错误"
end
y, m, d = tonumber(y), tonumber(m), tonumber(d)
第308行 ⟶ 第367行:
return "年份超出范围(1900-2100)"
end
if m < 1 or m > 12 then
return "月份错误"
end
if d < 1 or d > 31 then
return "日期错误"
第323行 ⟶ 第384行:
local ly = 1900
local temp = 0
while ly < 2101 and offset > 0 do
temp = lYearDays(ly)
第328行 ⟶ 第390行:
ly = ly + 1
end
if offset < 0 then
offset = offset + temp
第348行 ⟶ 第411行:
temp = monthDays(ly, lm)
end
offset = offset - temp
if isLeap and lm == leap + 1 then
isLeap = false
end
lm = lm + 1
end
第362行 ⟶ 第430行:
end
end
if offset < 0 then
offset = offset + temp
lm = lm - 1
end
ld = offset + 1
第372行 ⟶ 第442行:
local lMonth = nStr3[lm]
local lDay
if ld == 10 then
lDay = "初十"
|