Documentation for this module may be created at Module:Sandbox/MrSpecjal/Dates/doc
p = {}
p.extractDate = function (frame)
local date = frame.args.date or "invalid value"
local format = frame.args.format or "recognize format"
local output = ""
if(date == "invalid value") then
output = "Your input date is invalid"
return output
end
local day, month, year = string.match(date, "(%d+) (%w+) (%d+)")
if day == nil then
day = 1
end
if month == nil then
month = Invalid
end
if year == nil then
year = 2018
end
output = "Year = " .. year .. "<br>Day = " .. day .. "<br>Month = ".. month
return output
end
p.checkDate = function (frame)
local us_mdY = frame.args.us_mdY
local m, d, Y = us_mdY:match("(%d+)/(%d+)/(%d+)")
local epoch = os.time{year=Y, month=m, day=d}
local zeromdy = string.format("%02d/%02d/%04d", m, d, Y)
return zeromdy == os.date('%m/%d/%Y', epoch)
end
p.isValidDate = function (frame)
local us_mdY = frame.args.us_mdY
local m, d, y = us_mdY:match("(%d+)/(%d+)/(%d+)")
m, d, y = tonumber(m), tonumber(d), tonumber(y)
if d <= 0 or d > 31 or m <= 0 or m > 12 or y <= 0 then
-- Cases that don't make sense
return false
elseif m == 4 or m == 6 or m == 9 or m == 11 then
-- Apr, Jun, Sep, Nov can have at most 30 days
return d <= 30
elseif m == 2 then
-- Feb
if y%400 == 0 or (y%100 ~= 0 and y%4 == 0) then
-- if leap year, days can be at most 29
return d <= 29
else
-- else 28 days is the max
return d <= 28
end
else
-- all other months can have at most 31 days
return d <= 31
end
end
return p