Module:Date period
Yi palo
Documentation for this module may be created at Module:Date period/doc
local Date = require('Module:Date')._Date
local yesno = require('Module:Yesno')
local p = {}
local dateFormats = {
["mdy"] = "%B %-d",
["md"] = "%B %-d",
["month"] = "%B %-d",
["dmy"] = "%-d %B",
["dm"] = "%-d %B",
["day"] = "%-d %B"
}
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