Editing Module:D'ni Time
From Guild of Archivists
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 2: | Line 2: | ||
dnitools = require("Module:D'ni Tools") | dnitools = require("Module:D'ni Tools") | ||
local p = {} | local p = {} | ||
Line 197: | Line 193: | ||
return os.date("*t",surfaceTimestamp) | return os.date("*t",surfaceTimestamp) | ||
end | end | ||
-- ==Parse Functions== | |||
local function parseSurfaceDateStr(dateStr) | |||
-- Given a surface data string, accepts formats that #time accepts | |||
-- Returns a surfaceDate (table) | |||
lang = mw.getContentLanguage() | |||
surfaceTimeStamp = lang:formatDate("U",dateStr) | |||
surfaceTime = os.date("!*t",surfaceTimeStamp) | |||
surfaceTime['isdst'] = true | |||
return surfaceTime | |||
end | |||
-- ==Display Functions== | |||
local function getVaileeName(vailee, useDniFont) | |||
-- Return name of vailee given number (zero-indexed) | |||
-- If useDniFont is true, return it in Dnifont text | |||
useDniFont = useDniFont or false | |||
vaileetee = {"Leefo","Leebro","Leesahn","Leetar","Leevot","Leevofo","Leevobro","Leevosahn","Leevotar","Leenovoo"} | |||
vaileetee_dnifont = {"lEfo","lEbro","lEsan","lEtar","lEvot","lEvofo","lEvobro","lEvosan","lEvotar","lEnovU"} | |||
if(useDniFont) then | |||
return vaileetee_dnifont[vailee+1] | |||
else | |||
return vaileetee[vailee+1] | |||
end | |||
end | |||
local function displayDniTime(dniTime) | |||
-- Return dniTime (table) as string of table | |||
return '{'..'hahr = '..dniTime['hahr']..', vailee = '..dniTime['vailee']..', vaileeName = '..getVaileeName(dniTime['vailee'])..', yahr = '..dniTime['yahr']..', gahrtahvo = '..dniTime['gahrtahvo']..', tahvo = '..dniTime['tahvo']..', gorahn = '..dniTime['gorahn']..', prorahn = '..dniTime['prorahn']..'}' | |||
end | |||
local function displaySurfaceTime(surface) | |||
-- Return surfaceTime (table) as string of table | |||
return '{'..'year = '..surface['year']..', month = '..surface['month']..', day = '..surface['day']..', hour = '..surface['hour']..', min = '..surface['min']..', sec = '..surface['sec']..', isdst = '..tostring(surface['isdst'])..'}' | |||
end | |||
local function formatSurfaceTime(surfaceTime,format) | |||
format = format or 'c' | |||
lang = mw.getContentLanguage() | |||
return lang:formatDate(format,tostring(surfaceTime['year'])..'/'..tostring(surfaceTime['month'])..'/'..tostring(surfaceTime['day'])..' '..tostring(surfaceTime['hour'])..':'..tostring(surfaceTime['min'])..':'..tostring(surfaceTime['sec'])) | |||
end | |||
local function formatDniTime(dniTime,format) | |||
-- Given a DniTime (table), returns formatted string. | |||
-- format is a string with patterns for parts of the date, like standard dates | |||
-- Patterns in capitals padded with zeroes | |||
-- HHHH, hhhh = hahr (4-digits, Uppercase includes +/-) | |||
-- hh = last two digits of the hahr | |||
-- XX = 'era' (BE or DE) | |||
-- VVVV = vailee by name | |||
-- VV,vv = vailee (1 indexed) | |||
-- YY, yy = yahr | |||
-- GG, gg = gahrtahvo | |||
-- TT, tt = tahvo | |||
-- RR, rr = gorahnn | |||
-- PP, pp = prorahn | |||
result = format | |||
if (dniTime['hahr'] < 0) then | |||
era = "BE" | |||
sign = "-" | |||
else | |||
era = "DE" | |||
sign = "+" | |||
end | |||
result = string.gsub(result,"%a+", { | |||
["dHHHH"] = dnitools._num2dnifont(math.abs(dniTime['hahr']),4), | |||
["HHHH"] = string.format("%04d",tostring(dniTime['hahr'])), | |||
["dhhhh"] = dnitools._num2dnifont(math.abs(dniTime['hahr'])), | |||
["hhhh"] = math.abs(dniTime['hahr']), | |||
["dhh"] = dnitools._num2dnifont(string.sub(dniTime['hahr'],-2)), | |||
["hh"] = string.sub(dniTime['hahr'],-2), | |||
["dYY"] = dnitools._num2dnifont(dniTime['yahr'],2), | |||
["YY"] = string.format("%02d",tostring(dniTime['yahr'])), | |||
["dyy"] = dnitools._num2dnifont(dniTime['yahr']), | |||
["yy"] = dniTime['yahr'], | |||
["dVVVV"] = getVaileeName(dniTime['vailee'],true), | |||
["VVVV"] = getVaileeName(dniTime['vailee']), | |||
["VV"] = string.format("%02d",tostring(dniTime['vailee']+1)), | |||
["dvv"] = dnitools._num2dnifont(dniTime['vailee'] + 1), | |||
["vv"] = dniTime['vailee'] + 1, | |||
["GG"] = string.format("%02d",tostring(dniTime['gahrtahvo'])), | |||
["dgg"] = dnitools._num2dnifont(dniTime['gahrtahvo']), | |||
["gg"] = dniTime['gahrtahvo'], | |||
["TT"] = string.format("%02d",tostring(dniTime['tahvo'])), | |||
["dtt"] = dnitools._num2dnifont(dniTime['tahvo']), | |||
["tt"] = dniTime['tahvo'], | |||
["RR"] = string.format("%02d",tostring(dniTime['gorahn'])), | |||
["drr"] = dnitools._num2dnifont(dniTime['gorahn']), | |||
["rr"] = dniTime['gorahn'], | |||
["PP"] = string.format("%02d",tostring(dniTime['prorahn'])), | |||
["pp"] = dniTime['prorahn'], | |||
["dpp"] = dnitools._num2dnifont(dniTime['prorahn']), | |||
["XX"] = era, | |||
["X"] = sign, | |||
}) | |||
return result | |||
end | |||
-- ============================================================================= | -- ============================================================================= | ||
Line 221: | Line 334: | ||
preprocessSingleArg('datetime') | preprocessSingleArg('datetime') | ||
preprocessSingleArg('format') | preprocessSingleArg('format') | ||
if args['datetime'] then | if args['datetime'] then | ||
output = formatDniTime(surface2DniTime(makeSurfaceTimeStamp(parseSurfaceDateStr(args['datetime']))),args['format']) | |||
else | else | ||
preprocessSingleArg('year') | preprocessSingleArg('year') | ||
Line 235: | Line 346: | ||
-- Parse the data parameters | -- Parse the data parameters | ||
surface = {year = args['year'], month = args['month'] | surface = {year = args['year'], month = args['month'], day = args['day'], hour = args['hour'], min = args['minute'], sec = args['second']} | ||
-- return displaySurfaceTime(surface) | |||
output = formatDniTime(surface2DniTime(makeSurfaceTimeStamp(surface)),args['format']) | |||
end | end | ||
return output | return output | ||
Line 254: | Line 365: | ||
preprocessSingleArg('datetime') | preprocessSingleArg('datetime') | ||
preprocessSingleArg('format') | preprocessSingleArg('format') | ||
if args['datetime'] then | if args['datetime'] then | ||
output = | output = displaySurfaceTime(dni2SurfaceTime(dni)) | ||
else | else | ||
preprocessSingleArg('hahr') | preprocessSingleArg('hahr') | ||
Line 270: | Line 380: | ||
dni = {hahr = tonumber(args['hahr']), vailee = tonumber(args['vailee']), yahr = tonumber(args['yahr']), gahrtahvo = tonumber(args['gahrtahvo']), tahvo = tonumber(args['tahvo']), gorahn = tonumber(args['gorahn']), prorahn = tonumber(args['prorahn'])} | dni = {hahr = tonumber(args['hahr']), vailee = tonumber(args['vailee']), yahr = tonumber(args['yahr']), gahrtahvo = tonumber(args['gahrtahvo']), tahvo = tonumber(args['tahvo']), gorahn = tonumber(args['gorahn']), prorahn = tonumber(args['prorahn'])} | ||
-- | -- return displaySurfaceTime(surface) | ||
output = | output = formatSurfaceTime(dni2SurfaceTime(dni),args['format']) | ||
end | end | ||
Line 291: | Line 401: | ||
lang = mw.getContentLanguage() | lang = mw.getContentLanguage() | ||
timeStr = "1991-04-21 16:54:00 +0000" | |||
output = | output = timeStr .. "<br/>"..lang:formatDate("U",timeStr) | ||
output = output .. "<br/>"..displaySurfaceTime(parseSurfaceDateStr(timeStr)) | |||
output = output .. "<br/>"..displaySurfaceTime({year = 1991, month = 4, day = 21, hour = 16, min = 54, sec = 0}) | |||
output = output .. "<br/>"..makeSurfaceTimeStamp(parseSurfaceDateStr(timeStr)) | |||
output = output .. "<br/>".. | output = output .. "<br/>"..makeSurfaceTimeStamp({year = 1991, month = 4, day = 21, hour = 16, min = 54, sec = 0}) | ||
output = output .. "<br/>".. | output = output .. "<br/>"..displayDniTime(surface2DniTime(makeSurfaceTimeStamp(parseSurfaceDateStr(timeStr)))) | ||
output = output .. "<br/>".. | output = output .. "<br/>"..displayDniTime(surface2DniTime(makeSurfaceTimeStamp({year = 1991, month = 4, day = 21, hour = 16, min = 54, sec = 0}))) | ||