Module:Date period
{{#invoke:Date period|_main|dateA|dateB}}
| 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 | February 19 – present |
| present | 2021-02-25 | present – February 25 |
| 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, 2021 |
| 2020-02-19 | 2021-02-25 | no | February 19 – February 25 |
| 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. | February 19 – Sometime far in the future. |
| Long ago | 2021-02-25 | Long ago – February 25 |
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
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.