Module:ScheduleList:修订间差异
跳转到导航
跳转到搜索
无编辑摘要 |
无编辑摘要 |
||
第75行: | 第75行: | ||
} | } | ||
-- | -- 格式化当前行 | ||
local formatted_line | |||
if class ~= "" then | if class ~= "" then | ||
formatted_line = string.format('<div class="%s">%s<small>%s</small> %s</div>', class, ruby_output, week_day, title) | |||
else | else | ||
formatted_line = string.format('%s<small>%s</small> %s', ruby_output, week_day, title) | |||
end | end | ||
-- | -- 添加到结果表,并在每行后添加换行符 | ||
table.insert(result, formatted_line) | |||
end | end | ||
-- | -- 返回结果,每行独立输出并换行 | ||
return table.concat(result, "\n") | return table.concat(result, "\n") | ||
end | end | ||
return p | return p |
2025年1月23日 (四) 07:11的版本
此模块的文档可以在Module:ScheduleList/doc创建
local p = {}
-- 工具函数:判断是否为闰年
local function is_leap_year(year)
return (year % 4 == 0 and year % 100 ~= 0) or (year % 400 == 0)
end
-- 工具函数:计算每月天数
local function days_in_month(month, year, leap_year)
local days = {31, leap_year and 29 or 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
return days[month]
end
-- 工具函数:将输入的 `yydd` 转换为 `X月X日`
local function format_date(yydd)
local month = tonumber(string.sub(yydd, 1, 2)) -- 前两位是月份
local day = tonumber(string.sub(yydd, 3, 4)) -- 后两位是日期
return string.format("%d月%d日", month, day)
end
-- 工具函数:计算下一个日期
local function get_next_date(yydd, leap_year)
local month = tonumber(string.sub(yydd, 1, 2))
local day = tonumber(string.sub(yydd, 3, 4))
local days_in_current_month = days_in_month(month, nil, leap_year)
if day == days_in_current_month then
day = 1
month = month + 1
if month > 12 then
month = 1
end
else
day = day + 1
end
return string.format("%02d%02d", month, day) -- 返回格式化的 yydd 格式
end
-- 工具函数:计算下一周的周几
local function get_next_weekday(weekday)
local weekdays = {"周一", "周二", "周三", "周四", "周五", "周六", "周日"}
return weekdays[(weekday % 7) + 1]
end
-- 主函数
function p.main(frame)
local args = frame:getParent().args
-- 获取初始参数
local date = args.date -- 输入的日期为 `yydd` 格式
local week = tonumber(args.week) -- 输入的周几 (1~7)
local leap_year = args.leap_year == "yes" -- 闰年判断
-- 如果没有输入初始日期,则报错
if not date then return "请提供初始日期 (date 参数,格式为 yydd)!" end
if not week or week < 1 or week > 7 then return "请提供正确的初始周几 (week 参数,1~7)!" end
-- 初始化结果表
local result = {}
local current_date = date
local current_weekday = week
-- 循环生成7行
for i = 1, 7 do
local title = args["title" .. i] or "无" -- 未提供标题时默认 "无"
local time = args["time" .. i] or "2:00" -- 未提供时间时默认 "2:00"
local class = args["class" .. i] or "" -- 未提供 class 时默认空字符串
local week_day = get_next_weekday(current_weekday - 1) -- 计算周几
-- 调用 ruby 模板
local ruby_output = frame:expandTemplate{
title = "ruby",
args = {format_date(current_date), time}
}
-- 格式化当前行
local formatted_line
if class ~= "" then
formatted_line = string.format('<div class="%s">%s<small>%s</small> %s</div>', class, ruby_output, week_day, title)
else
formatted_line = string.format('%s<small>%s</small> %s', ruby_output, week_day, title)
end
-- 添加到结果表,并在每行后添加换行符
table.insert(result, formatted_line)
end
-- 返回结果,每行独立输出并换行
return table.concat(result, "\n")
end
return p