模块:Chinese calendar:修订间差异

添加712字节 、​ 2025年1月1日 (星期三)
//Edit via InPageEdit
(//Edit via InPageEdit)
(//Edit via InPageEdit)
第41行:
-- 节气数据(每个节气的日期偏移量)
local SOLAR_TERMS_OFFSET = {
46, 19, 3, 1820, 4, 19, 46, 1921, 45, 20, 46, 2021, 6, 2221, 67, 23, 8, 2223,
68, 2223, 78, 2224, 68, 2123, 67, 2122
}
 
第95行:
local day = extract(lunarCode, 18, 5)
return month, day
end
 
-- 计算节气的修正值,考虑年份差异带来的偏移
local function getTermOffset(year, termIndex)
local y = year - 1900
local n = math.floor(y * 0.2422)
local d = 0
 
if termIndex == 1 then -- 小寒
d = math.floor((y * 0.2422 + 3.87) - n)
elseif termIndex == 2 then -- 大寒
d = math.floor((y * 0.2422 + 18.73) - n)
else
-- 其他节气使用基础偏移量
return 0
end
 
return d
end
 
-- 计算节气
local function getSolarTerm(year, month, day)
local baseYeartermIndex = 1900(month - 1) * 2 + 1
local baseDay = 6 -- 1900年的小寒基准日
local yearDays = 365.242 -- 回归年长度
 
-- 计算与基准年份获取该月差距两个节气日期
localfor yearDiffi = year0, -1 baseYeardo
local termIndex = (month -local 1)idx = termIndex *+ 2i
local baseDay = SOLAR_TERMS_OFFSET[idx]
local offset = getTermOffset(year, idx)
local termDay = baseDay + offset
 
-- 计算如果是跨月的节气理论日期,进行修正
if termDay > 31 then
local theoreticalDay = math.floor(yearDiff * yearDays + baseDay + SOLAR_TERMS_OFFSET[termIndex + 1])
termDay = termDay - 31
end
 
if day == theoreticalDay % 31termDay then
-- 如果当前日期恰好是节气日期
return SOLAR_TERMS[termIndex + 1idx]
if day == theoreticalDay % 31 then
end
return SOLAR_TERMS[termIndex + 1]
end
 
第178行 ⟶ 第199行:
function p.toLunar(frame)
local date = frame.args[1]
local showSolarTerm = frame.args.showSolarTerm or false
if type(showSolarTerm) == "string" then
showSolarTerm = (showSolarTerm == "true" or showSolarTerm == "1")
end
 
-- 输入格式验证
if not date:match('^%d%d%d%d%-%d%d%-%d%d$') then
return '错误:日期格式无效,请使用YYYY-MM-DD格式'
end
 
local year = tonumber(date:sub(1, 4))
第210行 ⟶ 第239行:
local solarTerm = getSolarTerm(year, month, day)
if solarTerm then
result = result .. ' (' .. solarTerm .. ')'
end
end
2,099

个编辑