Changes

1,593 bytes added ,  21:17, 15 July 2021
Pywikibot 6.4.0
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, showYear)
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

-- Handles nil dateA or dateB, but not nil both.
local showYear = (yesno(showYear)) or (dateA or dateB).year ~= (dateB or dateA).year

-- 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') .. (showYear and (', ' .. dateB.year) or '')
elseif dateB == nil and dateA ~= nil then
return dateA:text('%B %-d') .. (showYear 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 .. (showYear and (', ' .. dateA.year) or '')
else
return dateA:text('%B %-d') .. ' – ' .. dateB:text('%B %-d') .. (showYear and (', ' .. dateA.year) or '')
end
else
return dateA:text('%B %-d, %-Y') .. ' – ' .. dateB:text('%B %-d, %-Y')
end

end

return p