![]() | This is the module sandbox page for Module:Sandbox/Angr pukhlya/2 ( diff). |
local p = {}
p.date_formatting = function( frame )
-- Unpacking date
local date = frame.args.date or "Invalid entry"
local format = frame.args.format or ""
months = {"January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December",
"January" = "01", "February" = "02", "March" = "03",
"April" = "04", "May" = "05", "June" = "06", "July" = "07",
"August" = "08", "September" = "09", "October" = "10",
"November" = "11", "December" = "12"}
local year, day = string.match(date, "%D*(%d*)%D*(%d*)%D*")
local ans = ""
if year ~= "" and day ~= "" then
if tonumber(day) > 31 then
if tonumber(year) <= 31 then
day, year = year, day
else
ans = "Invalid entry"
end
end
end
local k = nil
local month = ""
for i = 1, #months do
k = string.find(date, monthsi])
if k == nil then
k = string.find(date, string.lower(string.sub(monthsi], 1, 1)) .. string.sub(monthsi], 2))
end
if k == nil then
k = string.find(date, string.lower(string.sub(monthsi], 1, 1)) .. string.sub(monthsi], 2, 3))
end
if k == nil then
k = string.find(date, string.sub(monthsi], 1, 1) .. string.sub(monthsi], 2, 3))
end
if k ~= nil then
month = monthsi
end
end
if day ~= "" and year ~= "" and month == "" and string.find(date, "[-,/]") ~= nil then
day, month, year = string.match(date, "(%d+)[-, /](%d+)[-, /](%d+)")
local a, b, c = day, month, year
if tonumber(a) > 31 then
year = a
elseif tonumber(b) > 31 then
year = b
elseif tonumber(c) > 31 then
year = c
end
if tonumber(a) > 12 and year ~= nil and year ~= a then
day = a
elseif tonumber(b) > 12 and year ~= nil and year ~= b then
day = b
elseif tonumber(c) > 12 and year ~= nil and year ~= c then
day = c
end
if (year == a and day == b) or (year == b and day == a) then
month = monthstonumber(c)]
elseif (year == b and day == c) or (year == c and day == b) then
month = monthsa
elseif (year == a and day == c) or (year == c and day == a) then
month = monthstonumber(b)]
else
day, month, year = a, monthstonumber(b)], c
end
end
right = {}
for i = 1, 12 do
if i == 2 then
if year % 400 == 0 or (year % 100 ~= 0 and year % 4 == 0) then
righti = 29
else
righti = 28
end
elseif i <= 7 then
righti = 30 + i % 2
else
righti = 31 - i % 2
end
end
if rightmonthsi]] < day then
ans = "Invalid entry"
end
--Formatting unpacked date
local u_date = ""
local dop = ""
if ans ~= "Invalid entry" then
if format == "mdy" then
u_date = month .. " " .. day .. ", " .. year
elseif format == "dmy" then
u_date = day .. " " .. month .. " " .. year
elseif format == "iso" then
u_date = year .. "-" .. monthsmonth .. "-" .. day
elseif format == "year" then
u_date = year
elseif format == "month and year" then
u_date = month .. " " .. year
else
u_date = day .. " " .. month .. " " .. year
end
if string.find(date, "(uncertain)") ~= nil or string.find(date, "around") ~= nil then
dop = "circa "
end
else
u_date = ans
end
return dop .. u_date
end
return p
![]() | This is the module sandbox page for Module:Sandbox/Angr pukhlya/2 ( diff). |
local p = {}
p.date_formatting = function( frame )
-- Unpacking date
local date = frame.args.date or "Invalid entry"
local format = frame.args.format or ""
months = {"January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December",
"January" = "01", "February" = "02", "March" = "03",
"April" = "04", "May" = "05", "June" = "06", "July" = "07",
"August" = "08", "September" = "09", "October" = "10",
"November" = "11", "December" = "12"}
local year, day = string.match(date, "%D*(%d*)%D*(%d*)%D*")
local ans = ""
if year ~= "" and day ~= "" then
if tonumber(day) > 31 then
if tonumber(year) <= 31 then
day, year = year, day
else
ans = "Invalid entry"
end
end
end
local k = nil
local month = ""
for i = 1, #months do
k = string.find(date, monthsi])
if k == nil then
k = string.find(date, string.lower(string.sub(monthsi], 1, 1)) .. string.sub(monthsi], 2))
end
if k == nil then
k = string.find(date, string.lower(string.sub(monthsi], 1, 1)) .. string.sub(monthsi], 2, 3))
end
if k == nil then
k = string.find(date, string.sub(monthsi], 1, 1) .. string.sub(monthsi], 2, 3))
end
if k ~= nil then
month = monthsi
end
end
if day ~= "" and year ~= "" and month == "" and string.find(date, "[-,/]") ~= nil then
day, month, year = string.match(date, "(%d+)[-, /](%d+)[-, /](%d+)")
local a, b, c = day, month, year
if tonumber(a) > 31 then
year = a
elseif tonumber(b) > 31 then
year = b
elseif tonumber(c) > 31 then
year = c
end
if tonumber(a) > 12 and year ~= nil and year ~= a then
day = a
elseif tonumber(b) > 12 and year ~= nil and year ~= b then
day = b
elseif tonumber(c) > 12 and year ~= nil and year ~= c then
day = c
end
if (year == a and day == b) or (year == b and day == a) then
month = monthstonumber(c)]
elseif (year == b and day == c) or (year == c and day == b) then
month = monthsa
elseif (year == a and day == c) or (year == c and day == a) then
month = monthstonumber(b)]
else
day, month, year = a, monthstonumber(b)], c
end
end
right = {}
for i = 1, 12 do
if i == 2 then
if year % 400 == 0 or (year % 100 ~= 0 and year % 4 == 0) then
righti = 29
else
righti = 28
end
elseif i <= 7 then
righti = 30 + i % 2
else
righti = 31 - i % 2
end
end
if rightmonthsi]] < day then
ans = "Invalid entry"
end
--Formatting unpacked date
local u_date = ""
local dop = ""
if ans ~= "Invalid entry" then
if format == "mdy" then
u_date = month .. " " .. day .. ", " .. year
elseif format == "dmy" then
u_date = day .. " " .. month .. " " .. year
elseif format == "iso" then
u_date = year .. "-" .. monthsmonth .. "-" .. day
elseif format == "year" then
u_date = year
elseif format == "month and year" then
u_date = month .. " " .. year
else
u_date = day .. " " .. month .. " " .. year
end
if string.find(date, "(uncertain)") ~= nil or string.find(date, "around") ~= nil then
dop = "circa "
end
else
u_date = ans
end
return dop .. u_date
end
return p