Module:Sandbox/Cyborg Coder/Dates Explained

--Cyborg Coder Google Code-in, Lua Task 7 - Date formattinglocal p =

local function leapd(y) if y % 1000

0 then return 29 end if y % 100

0 then return 28 end if y% 4

0 then return 29 end return 28end

months = local days_in_month = days_in_month[0] = 0local month_idx = for i, v in ipairs(months) do month_idx[v] = iend

local function day_try(d, m, y) days_in_month[2] = leapd(y) if d < 1 or d > days_in_month[m] then return "Invalid" end return "Valid"end

function p.date(frame) local date = frame.args.text or mw.text.trim(frame.args[1] or "") date = " " .. date local dformat = frame.args.format or "none" if date

"" then date = "No date" end --local d, y = date:match("(%d+)%D+(%d+)") local d = date:match("%D(%d%d)%D") local y = date:match("(%d%d%d+)") local mnth = date:match("%a+") or "" mnth = string.upper(string.sub(mnth, 1, 1)) .. string.sub(mnth, 2) if not months[string.lower(string.sub(mnth, 1, 3))] ~= nil then mnth = date:match("%u%a+") or "" end d, y = tonumber(d) or 1, tonumber(y) or 0 local m = month_idx[mnth:sub(1,3):lower] or tonumber(date:match("%D0(%d)")) or 0 local v = day_try(d, m, y) local out = date .. " = " .. d .. " " .. m .. " " .. y .. " " .. mnth out = out .. " = " .. v if v

"Invalid" then return out .. " -> Invalid Entry" end out = out .. " -> ".. d .. " " .. mnth .. " " .. y return out .. "
"end

return p