Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Sandbox/Ste1la/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!
-- Ste1la Google Code-in, Date formatting local p = {} p.formatDate = function(frame) local date = frame.args.date or "" local format = frame.args.format or "" local circa local epoca = nil local out = "" local monthList = {"jan", "january", "feb", "february", "feb", "mar", "march", "apr", "april", "may", "jun", "june", "jul", "july", "aug", "august", "sep", "september", "oct", "october", "nov", "november", "dec", "december"} local obtain = 0 --> extracting dates --check if is uncertain and if epoca exists --[[ = date:find("uncertain") if circa == nil then circa = date:find("sometime") end if circa == nil then circa = date:find("around") end if circa ~= nil then out = out .. "circa " end]] if date:find("uncertain") or date:find("sometime") or date:find("around") then out = out .. "circa " end epoca = date:find("AD") if epoca ~= nil then epoca = "AD" elseif epoca == nil then epoca = date:find("BCE") if epoca ~= nil then epoca = "BCE" elseif epoca == nil then epoca = date:find("BC") if epoca ~= nil then epoca = "BC" elseif epoca == nil then epoca = date:find("CE") if epoca ~= nil then epoca = "CE" end end end end --dmy local day, month, year = date:match("(%d+) (%w+) (%d+)") if day ~= nil and month ~= nil and year ~= nil then obtain = 1 inputFormat = "dmy" end --mdy if obtain == 0 then month, day, year = date:match("(%w+) (%d+), (%d+)") if day ~= nil and month ~= nil and year ~= nil then obtain = 1 inputFormat = "mdy" end end --three number cases if obtain == 0 then day, month, year = date:match("(%d+)/(%d+)/(%d+)") if day ~= nil and month ~= nil and year ~= nil then obtain = 1 inputFormat = "iso" end end if obtain == 0 then day, month, year = date:match("(%d+)-(%d+)-(%d+)") if day ~= nil and month ~= nil and year ~= nil then obtain = 1 inputFormat = "iso" end end -- not any above, gets two numbers and checks for month if obtain == 0 then local i, j = date:find("%d+") if i ~= nil then year = date:sub(i, j) or 0 inputFormat = "year" if i ~= nil then i, j = date:find("%d+", j + 1) if i ~= nil then day = date:sub(i, j) or 0 inputFormat = "day" end end end for i = 1, 23 do local temp = date:lower() if temp:match(monthList[i]) ~= nil then month = temp:match(monthList[i]) if inputFormat == "year" then inputFormat = "month and year" elseif inputFormat == "day" then inputFormat = "all" end end i = i + 1 end if month == nil then month = "" end if day == nil then day = 0 end if year == nil then year = 0 end end if (day == "" or day == 0) and (year == "" or year == 0) then return "Invalid entry" end if inputFormat == "day" then inputFormat = "year" end --converts month to number if tonumber(month) == nil then monthChange = 1 month = month:lower() if month:match("jan") then month = 1 elseif month:match("feb") then month = 2 elseif month:match("mar") then month = 3 elseif month:match("apr") then month = 4 elseif month:match("may") then month = 5 elseif month:match("jun") then month = 6 elseif month:match("jul") then month = 7 elseif month:match("aug") then month = 8 elseif month:match("sep") then month = 9 elseif month:match("oct") then month = 10 elseif month:match("nov") then month = 11 elseif month:match("dec") then month = 12 else month = 0 end end -->switches variables -- sets year day = tonumber(day) month = tonumber(month) if day > 31 then local temp = year year = day day = temp elseif month > 31 then local temp = year year = month month = temp end if month > 12 then local temp = day day = month month = temp end --checks leap year if month == 2 and day > 29 then return "Invalid entry" end if month == 2 and day == 29 then local leap = year % 4 if leap ~= 0 then return "Invalid entry" end end --OUTPUTS DATAAAAAAAAAAA!!! -->reformat data if necessary if format ~= "" then inputFormat = "" end if format == "dmy" or format == "mdy" or format == "month and year" or inputFormat == "dmy" or inputFormat == "mdy" or inputFormat == "month and year" or inputFormat == "all" then if month == 1 then month = "January" elseif month == 2 then month = "February" elseif month == 3 then month = "March" elseif month == 4 then month = "April" elseif month == 5 then month = "May" elseif month == 6 then month = "June" elseif month == 7 then month = "July" elseif month == 8 then month = "August" elseif month == 9 then month = "September" elseif month == 10 then month = "October" elseif month == 11 then month = "November" elseif month == 12 then month = "December" end end if day == 0 then day = "" end if month == 0 then month = "" end if year == 0 then year = "" end if format == "dmy" then if day < 31 and year < 31 and month == "" then return "Invalid entry" end out = out .. day .. " " .. month .. " " .. year elseif format == "mdy" then out = out .. month .. " " .. day .. ", " .. year elseif format == "iso" then if month < 10 then month = "0" .. month end out = out .. year .. "-" .. month .. "-" .. day elseif format == "year" then out = out .. year elseif format == "month and year" then out = out .. month .. " " .. year elseif inputFormat == "dmy" then if tonumber(day) < 31 and tonumber(year) < 31 and month == "" then return "Invalid entry" end out = out .. day .. " " .. month .. " " .. year elseif inputFormat == "mdy" then out = out .. month .. " " .. day .. ", " .. year elseif inputFormat == "iso" then if month < 10 then month = "0" .. month end out = out .. year .. "-" .. month .. "-" .. day elseif inputFormat == "year" then out = out .. year elseif inputFormat == "month and year" then out = out .. year .. " " .. month else if day ~= "" or day ~= nil then out = out .. day .. " " end if month ~= "" or month ~= nil then out = out .. month .. " " end if year ~= "" or year ~= nil then out = out .. year end end if epoca ~= nil then out = out .. " " .. epoca end return out .. "<br>" 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/Ste1la/Dates/doc
(
edit
)