Module:IUCDate:修订间差异
QWERTY 52 38(留言 | 贡献) 小 全部完成 |
QWERTY 52 38(留言 | 贡献) 无编辑摘要 |
||
第2行: | 第2行: | ||
local module = {} | local module = {} | ||
local getArgs = require('Module:Arguments').getArgs | |||
origin = os.time({year=2022,month=4,day=1,hour=22,minute=13}) | origin = os.time({year=2022,month=4,day=1,hour=22,minute=13}) | ||
mic = 9.402 --1微=9.402s | mic = 9.402 --1微=9.402s | ||
第57行: | 第59行: | ||
local hourNum = math.floor(micNum / 100 + 0.00000000001) | local hourNum = math.floor(micNum / 100 + 0.00000000001) | ||
micNum = micNum - hourNum * 100 | micNum = micNum - hourNum * 100 | ||
return | return {cycleNum, divisionNum, yearNum, seasonNum, weekNum, hourNum, micNum} | ||
end | end | ||
function module. | -- 下面两个是基础代码,不是用来调用的 | ||
function module.convert_base(time) | |||
return module.sec2date(module.timeDelta(os.time(time))) | return module.sec2date(module.timeDelta(os.time(time))) | ||
end | end | ||
function module. | function module.convertNow_base(offset) | ||
return module.sec2date(module.timeDelta(os.time() + offset * mic)) | return module.sec2date(module.timeDelta(os.time() + offset * mic)) | ||
end | |||
-- 下面两个是用来#invoke调用的 | |||
function module.convert(frame) | |||
local args = getArgs(frame) | |||
local time = args[1] | |||
return module.formatDate(module.convert_base(time)) | |||
end | |||
function module.convertNow(frame) | |||
local args = getArgs(frame) | |||
local offset = args[1] | |||
return module.formatDate(module.convertNow_base(offset)) | |||
end | end | ||
return module | return module |
2022年5月1日 (日) 16:05的版本
此模块的文档可以在Module:IUCDate/doc创建
-- 星际统一历日期转换,作者:QWERTY_52_38
local module = {}
local getArgs = require('Module:Arguments').getArgs
origin = os.time({year=2022,month=4,day=1,hour=22,minute=13})
mic = 9.402 --1微=9.402s
function module.test()
local now = os.time()
mw.log(now)
return now
end
function module.isSpecialYear(year)
-- 判断是否要减去1微
if (year % 4 == 0) then
return true
elseif ((year - 1) % 200 == 0) then
return true
else
return false
end
end
function module.timeDelta(time)
-- 与纪元起点的差值
return time - origin
end
function module.formatDate(dateTable)
local a = tostring(dateTable[1]).."轮 "..tostring(dateTable[2]).."分轮 "..tostring(dateTable[3]).."年 "..tostring(dateTable[4]).."季 "..tostring(dateTable[5]).."周 "..tostring(dateTable[6]).."时 "..tostring(dateTable[7]).."微"
return a
end
function module.sec2date(sec)
-- 将module.timeDelta得到的差值(单位为秒)转换为星际统一历时间
local micNum = math.floor(sec / mic + 0.00000000001)
local yearNum = 0
if micNum >= 99995 then
repeat
if (module.isSpecialYear(yearNum)) then
j = 0
else
j = 1
end
micNum = micNum - 99995 - j
yearNum = yearNum + 1
until (micNum < 99995 + j)
end
local cycleNum = math.floor(yearNum / 144 + 0.00000000001)
yearNum = yearNum - cycleNum * 144
local divisionNum = math.floor(yearNum / 12 + 0.00000000001)
yearNum = yearNum - divisionNum * 12
local seasonNum = math.floor(micNum / 10000 + 0.00000000001)
micNum = micNum - seasonNum * 10000
local weekNum = math.floor(micNum / 1000 + 0.00000000001)
micNum = micNum - weekNum * 1000
local hourNum = math.floor(micNum / 100 + 0.00000000001)
micNum = micNum - hourNum * 100
return {cycleNum, divisionNum, yearNum, seasonNum, weekNum, hourNum, micNum}
end
-- 下面两个是基础代码,不是用来调用的
function module.convert_base(time)
return module.sec2date(module.timeDelta(os.time(time)))
end
function module.convertNow_base(offset)
return module.sec2date(module.timeDelta(os.time() + offset * mic))
end
-- 下面两个是用来#invoke调用的
function module.convert(frame)
local args = getArgs(frame)
local time = args[1]
return module.formatDate(module.convert_base(time))
end
function module.convertNow(frame)
local args = getArgs(frame)
local offset = args[1]
return module.formatDate(module.convertNow_base(offset))
end
return module