Module:Date period
Appearance
![]() | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
Usage
- For templates, you might want to use {{Date period}} instead.
{{#invoke:Date period|_main|dateA|dateB}}
Automatically formats two given dates with a space and and en dash. Dates can be of any format supported by Module:Date.
If the month is the same, it is only shown once. If the month and day is the same, it will not show a second part at all. If the year is different, it will show the year unless disabled.
Date A | Date B | Output |
---|---|---|
2021-02-19 | present | Lua error at line 14: attempt to index local 'dateB' (a nil value). |
present | 2021-02-25 | Lua error at line 14: attempt to index local 'dateA' (a nil value). |
2021-02-19 | 2021-02-25 | February 19 – 25 |
2021-02-19 | 2021-03-25 | February 19 – March 25 |
2020-02-19 | 2021-02-25 | February 19, 2020 – February 25, 2021 |
The year can be forcefully shown with the force-year
parameter (third parameter of p._main
).
Date A | Date B | force-year | Output |
---|---|---|---|
2021-02-19 | 2021-02-25 | no | February 19 – 25 |
2021-02-19 | 2021-02-25 | yes | February 19 – 25 |
2020-02-19 | 2021-02-25 | no | February 19, 2020 – February 25, 2021 |
2020-02-19 | 2021-02-25 | yes | February 19, 2020 – February 25, 2021 |
If one of the dates is invalid, the raw text will be displayed instead.
Date A | Date B | Output |
---|---|---|
2021-02-19 | Sometime far in the future. | Lua error at line 14: attempt to index local 'dateB' (a nil value). |
Long ago | 2021-02-25 | Lua error at line 14: attempt to index local 'dateA' (a nil value). |
local Date = require('Module:Date')._Date
local yesno = require('Module:Yesno')
local p = {}
function p.main(frame)
return p._main(frame.args)
end
function p._main(args)
local dateA = Date(args[1])
local dateB = Date(args[2])
local disableYear = args['no-year'] and yesno(args['no-year']) or dateA.year == dateB.year
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 .. (disableYear and "" or ", " .. dateA.year)
else
return dateA:text("%B %-d") .. " – " .. dateB:text("%B %-d") .. (disableYear and "" or ", " .. dateA.year)
end
else
return dateA:text("%B %-d, %-Y") .. " – " .. dateB:text("%B %-d, %-Y")
end
end
return p