模块:TimeDiff:修订间差异
来自RIA | Wiki
更多操作
BCMonomial(留言 | 贡献) 无编辑摘要 |
BCMonomial(留言 | 贡献) 无编辑摘要 |
||
| 第44行: | 第44行: | ||
local diff = endTs - startTs | local diff = endTs - startTs | ||
-- | -- 情况0:未指定格式,返回原始秒数(带正负号) | ||
if not formatType then | if not formatType then | ||
return math.floor(diff) | return math.floor(diff) | ||
end | end | ||
-- 准备计算格式化时间,使用绝对值 | |||
local absDiff = math.abs(diff) | local absDiff = math.abs(diff) | ||
local totalDays = math.floor(absDiff / 86400) | local totalDays = math.floor(absDiff / 86400) | ||
-- 情况5:特殊处理,仅输出 年+天 | |||
if formatType == 5 then | |||
local years = math.floor(totalDays / 365) | |||
local days = totalDays % 365 | |||
return years .. "年" .. days .. "天" | |||
end | |||
-- 情况1-4:常规处理 | |||
local remainder = absDiff % 86400 | local remainder = absDiff % 86400 | ||
| 第61行: | 第69行: | ||
local seconds = remainder % 60 | local seconds = remainder % 60 | ||
-- | -- 构建输出字符串 (格式 1-4) | ||
local output = totalDays .. "天" | |||
local output = | |||
if formatType >= 2 then | if formatType >= 2 then | ||
output = output .. hours .. "小时" | output = output .. hours .. "小时" | ||
end | end | ||
if formatType >= 3 then | if formatType >= 3 then | ||
output = output .. minutes .. "分钟" | output = output .. minutes .. "分钟" | ||
end | end | ||
if formatType >= 4 then | if formatType >= 4 then | ||
output = output .. seconds .. "秒" | output = output .. seconds .. "秒" | ||
2025年11月24日 (一) 16:31的最新版本
此模块的文档可以在模块:TimeDiff/doc创建
local p = {}
-- 获取时间戳的辅助函数
local function getTimestamp(timeStr)
if not timeStr or mw.text.trim(timeStr) == '' then
timeStr = 'now'
end
timeStr = mw.text.trim(timeStr)
if string.lower(timeStr) == 'now' then
return os.time()
end
local lang = mw.language.getContentLanguage()
local success, timestamp = pcall(function()
return tonumber(lang:formatDate('U', timeStr .. '+08:00'))
end)
if success and timestamp then
return timestamp
else
return nil
end
end
function p.main(frame)
local args = frame:getParent().args
if not args['开始时间'] and not args['结束时间'] and not args['格式'] then
args = frame.args
end
local startTimeStr = args['开始时间']
local endTimeStr = args['结束时间']
local formatType = tonumber(args['格式'])
local startTs = getTimestamp(startTimeStr)
local endTs = getTimestamp(endTimeStr)
if not startTs or not endTs then
return '<span class="error">时间格式错误</span>'
end
local diff = endTs - startTs
-- 情况0:未指定格式,返回原始秒数(带正负号)
if not formatType then
return math.floor(diff)
end
-- 准备计算格式化时间,使用绝对值
local absDiff = math.abs(diff)
local totalDays = math.floor(absDiff / 86400)
-- 情况5:特殊处理,仅输出 年+天
if formatType == 5 then
local years = math.floor(totalDays / 365)
local days = totalDays % 365
return years .. "年" .. days .. "天"
end
-- 情况1-4:常规处理
local remainder = absDiff % 86400
local hours = math.floor(remainder / 3600)
remainder = remainder % 3600
local minutes = math.floor(remainder / 60)
local seconds = remainder % 60
-- 构建输出字符串 (格式 1-4)
local output = totalDays .. "天"
if formatType >= 2 then
output = output .. hours .. "小时"
end
if formatType >= 3 then
output = output .. minutes .. "分钟"
end
if formatType >= 4 then
output = output .. seconds .. "秒"
end
return output
end
return p