Module:Game dates
From IFWiki
Documentation for this module may be created at Module:Game dates/doc
local p = {}
local cargo = mw.ext.cargo
function getDateAndUncertainty( release )
function getMonthNumber(monthName)
local months = {
['january'] = '01', ['february'] = '02', ['march'] = '03', ['april'] = '04',
['may'] = '05', ['june'] = '06', ['july'] = '07', ['august'] = '08',
['september'] = '09', ['october'] = '10', ['november'] = '11', ['december'] = '12'
}
return months[monthName:lower()]
end
dateTable = { }
for d in string.gmatch( release, "<p>'''Date:''' (.-) </p" ) do
-- Relying on [[Template:Game release]] not changing
d = mw.text.trim(d)
u = 'No' -- uncertainty, for now
s = '' -- will be like a timestamp, for ordering
if d ~= "" then
-- We have a date
if d.match(d, " %(uncertain%)$") then
u = 'Yes'
d = d.gsub(d, " %(uncertain%)$", "")
d = mw.text.trim(d)
end
day, month, year = d.match(d, "^(%d+) (%w+) (%d+)$")
if day and #day == 1 then
day = '0' .. day
end
if year then
s = year .. getMonthNumber(month) .. day
else
month, year = d.match(d, "^(%w+) (%d+)$")
if year then
s = year .. getMonthNumber(month) .. '99'
else
year = d.match(d, "^(%d+)$")
if year then
s = year .. '9999'
end
end
end
table.insert (dateTable, { d=d, u=u, s=s})
end
end
-- Get earliest date
-- Preferring more precise dates, e.g. January 1970 (19700199) rather than 1970 (19709999)
table.sort(dateTable, function(a, b)
if a.s == '' and b.s == '' then
return false
elseif a.s == '' then
return false
elseif b.s == '' then
return true
else
return a.s < b.s
end
end)
if dateTable[1] ~= nil then
return dateTable[1]['d'], dateTable[1]['u'] -- earliest
else
return '', 'No'
end
end
function p.GameDate( frame )
release = frame.args['Release']
d,u = getDateAndUncertainty (release)
return d
end
function p.GameDateUncertain( frame )
release = frame.args['Release']
d,u = getDateAndUncertainty (release)
return u
end
return p