Module:Sandbox/MrSpecjal/Dates

Revision as of 09:30, 8 November 2018 by imported>MrSpecjal
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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