Module:Date period

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

local p = {}

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

function p._main(_dateA, _dateB, _forceYear) if _dateA == nil and _dateB == nil then error('Date A or B not provided.') elseif _dateA == nil then return Date(_dateA):text('%B %-d') elseif _dateB == nil then return Date(_dateB):text('%B %-d') 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('%B %-d') .. (forceYear and (', ' .. dateB.year) or '') elseif dateB == nil and dateA ~= nil then return dateA:text('%B %-d') .. (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('%B %-d') elseif dateA.month == dateB.month then return dateA:text('%B %-d') .. ' – ' .. dateB.day .. (forceYear and (', ' .. dateA.year) or '') else return dateA:text('%B %-d') .. ' – ' .. dateB:text('%B %-d') .. (forceYear and (', ' .. dateA.year) or '') end else -- Hide year if forced if forceYear == false then return dateA:text('%B %-d') .. ' – ' .. dateB:text('%B %-d') else return dateA:text('%B %-d, %-Y') .. ' – ' .. dateB:text('%B %-d, %-Y') end end end

return p