Module:Date converter
Appearance
local p = {}
local month_names = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}
local function d_m_y(day, month, year)
year = tonumber(year)
day = tonumber(day)
month = tonumber(month)
-- Inverts day by year, if the date format is xxxx/xx/xx
if (day and day > 100) then
day, year = year, day
end
-- Adds two thousand if the date entered is two digits
if (year and year < 100) then
year = year + 2000
end
-- Inverts day by month, if the date format is month/day/year
if (month and (month > 12 and month < 32)) then
day, month = month, day
end
-- A few pages had a non-existent index error for the month
if (month and (month > 12 or month < 1)) then
month = nil
end
if (day and month and year) ~= nil then
return month_names[month] .. " " .. day .. ", " .. year
end
return nil
end
local function m_y(month, year)
year = tonumber(year)
month = tonumber(month)
-- Returns nil if none of the numbers are greater than 1000
if not year or not month or (year < 1000 and month < 1000) then
return nil
end
-- Inverts month to year, if the date format is year/month
if month > 1000 then
month, year = year, month
end
-- A few pages had a non-existent index error for the month
if month > 12 or month < 1 then
return nil
end
if (month and year) ~= nil then
return month_names[month] .. " " .. year
end
return nil
end
function p.main(frame)
local date = frame.args[1]
local converted
local day, month, year = string.match(date, "^(%d+)[/%.%-](%d+)[/%.%-](%d+)$")
if day then
converted = d_m_y(day, month, year)
else
month, year = string.match(date, "^(%d+)[/%.%-](%d+)$")
converted = m_y(month, year)
end
return converted or date
end
return p