Module:Sandbox/Boboquack/Dates: Difference between revisions

Content deleted Content added
Boboquack (talk | contribs)
No edit summary
Boboquack (talk | contribs)
No edit summary
Line 30:
p.convert=function(frame)
local indate=frame.args.date
local day,month,year,era,inform,circa,outdate=nil
--parse indate -> inform, day, month, year, era; then check if valid
--first try: parse as some iso-like format
local num1,sep,num2,num3,era=string.match(indate, "(%d+)(%D+)(%d+)%D+(%d+)")
if valid(num3,num2,num1) then day,month,year,inform=num3,num2,num1,"iso" else
if valid(num1,num2,num3) then day,month,year,inform=num1,num2,num3,"iso" else
if valid(num2,num1,num3) then day,month,year,inform=num2,num1,num3,"iso" else
if valid(num3,num1,num2) then day,month,year,inform=num3,num1,num2,"iso" else
if valid(num1,num3,num2) then day,month,year,inform=num1,num3,num2,"iso" else
if valid(num2,num3,num1) then day,month,year,inform=num2,num3,num1,"iso" else
--second try: parse as some dmy-like format
--third try: parse as some mdy-like format
--fourth try: parse as month,year-like format
--fifth try: parse as year
end end end end end end-- ends from all the elses
--get era
if string.find(indate,"BC") then era=" BC"
elseif string.find(indate,"BCE") then era=" BCE"
elseif string.find(indate,"CE") then era=" CE"
elseif string.find(indate,"AD") then era=" AD"
else era="" end
--get uncertainty
if string.match(indate,"[around|uncertain|about|approx|circa|ca%.]") then circa="circa " else circa="" end
local outform=frame.args.format or inform or "iso"
--convert output date to input format -> outdate
local outdate = ((day or "").." "..(month or "").." "..(year or "")) or indate or "not there yet"
if outform=="iso" then
return outdate .. " Format: " .. outform
if era==" BC" or era==" BCE" then
circa=circa.."-"
year=year-1
end
outdate = string.format("%04d-%02d-%02d",year,month,day)
end
outdate = circa..outdate
return outdate
end