Module:Date period

{{#invoke:Date period|_main|dateA|dateB}}

Module:Date period

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.

  1. 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:
  2. 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.
  3. 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.
  4. 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.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.