Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Sandbox/Kid116/Dates
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} function p.Dates (frame) input = mw.text.trim(frame.args[1]) input = " " .. input .. " " xformat = frame.args.format or 0 xsuffix = frame.args.suffix or 0 hasDate = 0 hasMonth = 0 hasYear = 0 year = 0 month = 0 xdate = 0 specialSuffix = 0 ly = 0 valid = 1 txt = "" a = 0 b = 0 p.yr () if hasYear~=0 then if input:find ("%d%d%p%d%d%p%d%d%d%d") or input:find ("%d%d%d%d%p%d%d%p%d%d") then p.isoType () else p.Monthss () p.Date () end else p.Monthss () if hasMonth~=0 then p.Date () else if input:find ("%s%d%d%s") then if input:find ("AD") or input:find ("BC") or input:find ("CE") or input:find ("BCE") then year = tonumber(string.sub(input, input:find ("%s%d%d%s")+1, input:find ("%s%d%d%s")+2)) a = 1 end else valid = 0 end end end if hasYear then p.leapYear () end p.validation() if a == 1 then valid = 1 end if valid ~= 0 then if xsuffix == 0 then if input:find ("AD") or input:find ("BC") or input:find ("CE") or input:find ("BCE") then if year ~= 0 then if input:find ("AD") then xsuffix = "AD" end if input:find ("BC") then xsuffix = "BE" end if input:find ("CE") then xsuffix = "CE" end if input:find ("BCE") then xsuffix = "BCE" end end end end if xsuffix ~= 0 then p.suffixes () else if xformat == 0 then xformat = "dmy" if input:find (",") then xformat = "mdy" end if input:find ("-") or input:find ("/") then xformat = "iso" end end if xdate == 0 and month == 0 and year ~= 0 then xformat = "year" end if xdate ~= 0 and month == 0 and year ~= 0 then xformat = "year" end p.formats () end if specialSuffix then p.sSuffixes () end else txt = "Invalid entry. " end return txt .. " " end function p.yr () if input:find ("%s%d%d%d%s") then hasYear = 1 year = string.sub(input, input:find ("%s%d%d%d%s") + 1, input:find ("%s%d%d%d%s") + 3) end if input:find ("%s%d%d%d%d%s") then hasYear = 1 year = string.sub(input, input:find ("%s%d%d%d%d%s") + 1, input:find ("%s%d%d%d%d%s") + 4) end if input:find ("%p%d%d%d%d%s") then hasYear = 1 year = string.sub(input, input:find ("%p%d%d%d%d%s") + 1, input:find ("%p%d%d%d%d%s") + 4) end if input:find ("%s%d%d%d%d%p") then hasYear = 1 year = string.sub(input, input:find ("%s%d%d%d%d%p") + 1, input:find ("%s%d%d%d%d%p") + 4) end year = tonumber(year) end function p.sSuffix() if input:find ("uncertain") or input:find ("sometime") or input:find ("around") then if input:find ("uncertain who") then specialSuffix = 2 else specialSuffix = 1 end end if input:find ("lord") and input:find ("year") then specialSuffix = 3 end end function p.isoType() if input:find ("%d%d%p%d%d%p%d%d%d%d") then temp1 = tonumber(string.sub(input, input:find ("%d%d%p%d%d%p%d%d%d%d"), input:find ("%d%d%p%d%d%p%d%d%d%d") + 1)) temp2 = tonumber(string.sub(input, input:find ("%d%d%p%d%d%p%d%d%d%d") + 3, input:find ("%d%d%p%d%d%p%d%d%d%d") + 4)) end if input:find ("%d%d%d%d%p%d%d%p%d%d") then temp1 = tonumber(string.sub(input, input:find ("%d%d%d%d%p%d%d%p%d%d") + 5, input:find ("%d%d%d%d%p%d%d%p%d%d") + 6)) temp2 = tonumber(string.sub(input, input:find ("%d%d%d%d%p%d%d%p%d%d") + 8, input:find ("%d%d%d%d%p%d%d%p%d%d") + 9)) end if temp1 < 13 and temp2 > 12 then month = temp1 xdate = temp2 end if temp1 > 12 and temp2 < 13 then month = temp2 xdate = temp1 end if temp1 > 31 and temp2 > 31 then valid = 0 end if temp1 < 13 and temp2 < 13 then month = temp2 xdate = temp1 end end function p.Monthss () Months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" } for i = 1, 12 do if input:find (Months[i]) then month = i hasMonth = 1 end end end function p.Date () if input:find ("%s%d%a%a%s") or input:find ("%s%d%d%a%a%s") then if input:find ("%s%d%a%a%s") then xdate = tonumber(string.sub(input, input:find ("%s%d%a%a%s") + 1, input:find ("%s%d%a%a%s") + 1)) end if input:find ("%s%d%d%a%a%s") then xdate = tonumber(string.sub(input, input:find ("%s%d%d%a%a%s") + 1, input:find ("%s%d%d%a%a%s") + 2)) end else if input:find ("%s%d%d%s") or input:find ("%s%d%d%p") then if input:find ("%s%d%d%s") and input:find ("%s%d%d%p") then if input:find ("%s%d%d%s") < input:find ("%s%d%d%p") then xdate = tonumber(string.sub(input, input:find ("%s%d%d%s") + 1, input:find ("%s%d%d%s") + 2)) else xdate = tonumber(string.sub(input, input:find ("%s%d%d%p") + 1, input:find ("%s%d%d%p") + 2)) end else if input:find ("%s%d%d%s") then xdate = tonumber(string.sub(input, input:find ("%s%d%d%s") + 1, input:find ("%s%d%d%s") + 2)) else xdate = tonumber(string.sub(input, input:find ("%s%d%d%p") + 1, input:find ("%s%d%d%p") + 2)) end end if xdate > 31 then valid = 0 end if xdate then hasDate = 1 end end end end function p.leapYear () if year % 100 ~= 0 and year % 4 == 0 then ly = 1 else if year % 400 == 0 then ly = 1 end end end function p.validation () if hasYear == 0 and hasMonth == 0 then valid = 0 end if month > 12 then valid = 0 end if month == 4 then if xdate > 30 then valid = 0 end end if month == 6 then if xdate > 30 then valid = 0 end end if month == 9 then if xdate > 30 then valid = 0 end end if month == 11 then if xdate > 30 then valid = 0 end end if month == 2 then if ly == 1 then if xdate > 29 then valid = 0 end else if xdate > 28 then valid = 0 end end end if xdate then hasDate = 1 else hasDate = 0 end end function p.formats () Months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" } if xformat == "dmy" then if hasDate ~= 0 then txt = txt .. xdate .. " " end if hasMonth ~= 0 then txt = txt .. Months[month] .. " " end if hasYear ~= 0 then txt = txt .. year end end if xformat == "mdy" then if month ~= 0 then txt = txt .. Months[month] .. " " end if xdate ~= 0 then txt = txt .. xdate end if year ~= 0 then txt = txt .. ", " .. year end end if xformat == "iso" then txt = txt .. year if month < 10 then month = "0" .. month txt = txt .. "-" .. month else txt = txt .. "-" .. month end if xdate < 10 then xdate = "0" .. xdate txt = txt .. "-" .. xdate else txt = txt .. "-" .. xdate end end if xformat == "year" then if hasYear then txt = txt .. year .. " " else txt = "More information required. " end end end function p.suffixes () if xsuffix == "AD" then txt = year .. " AD " end if xsuffix == "BC" then txt = "BC " .. year .. " " end if xsuffix == "CE" then txt = year .. " CE " end if xsuffix == "BCE" then txt = year .. " BCE " end if specialSuffix == 1 then txt = "c. " .. txt end end function p.sSuffixes () if specialSuffix == 2 then txt = txt .. " (uncertain who was present)" end if specialSuffix == 3 then txt = "" .. year .. " AD" end end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Sandbox/Kid116/Dates/doc
(
edit
)