Module:Date period explained

local Date = require('Module:Date')._Datelocal yesno = require('Module:Yesno')

local p =

local dateFormats =

function p.main(frame) return p._main(frame.args[1], frame.args[2], frame.args['force-year'], frame.args['format'] or "mdy" )end

function p._main(_dateA, _dateB, _forceYear, _format) -- mdy by default local dateFormat = dateFormats[_format] or "%B %-d" if _dateA

nil and _dateB

nil then error('Date A or B not provided.') elseif _dateA

nil then return Date(_dateA):text(dateFormat) elseif _dateB

nil then return Date(_dateB):text(dateFormat) end local dateA = Date(_dateA) local dateB = Date(_dateB) if dateA

nil and dateB

nil then error("Either date A, date B, or both dates must be valid.") end local forceYear = yesno(_forceYear) -- Handle cases where one of the dates is not a valid date. if dateA

nil and dateB ~= nil then return _dateA .. ' – ' .. dateB:text(dateFormat) .. (forceYear and (', ' .. dateB.year) or ) elseif dateB

nil and dateA ~= nil then return dateA:text(dateFormat) .. (forceYear and (', ' .. dateA.year) or ) .. ' – ' .. _dateB end if dateA.year

dateB.year then if dateA.month

dateB.month and dateA.day

dateB.day then return dateA:text(dateFormat) elseif dateA.month

dateB.month then return dateA:text(dateFormat) .. ' – ' .. dateB.day .. (forceYear and (', ' .. dateA.year) or ) else return dateA:text(dateFormat) .. ' – ' .. dateB:text(dateFormat) .. (forceYear and (', ' .. dateA.year) or ) end else -- Hide year if forced if forceYear

false then return dateA:text(dateFormat) .. ' – ' .. dateB:text(dateFormat) else return dateA:text(dateFormat .. ', %-Y') .. ' – ' .. dateB:text(dateFormat .. ', %-Y') end end end

return p