Vés al contingut

Mòdul:Data

De la Viquipèdia, l'enciclopèdia lliure
Icona de documentació de mòdul Documentació del mòdul [ mostra ] [ modifica el codi ] [ mostra l'historial ] [ refresca ]

Mòdul Data (codi · ús · discussió · proves · tests · casos prova | subpàgines · enllaços)

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Formatació de dates.

Sintaxi: {{#invoke:data|data_format|<data>|<format>}}

El primer paràmetre és la data a formatar. El segon paràmetre és el format a aplicar segons la funció #time. Per defecte aplica el format "j F Y" (d mes any).

Tracta diferents formats d'entrada. Vegeu {{data consulta}} per a una mostra.

local p = {}

local function mesNumero(mes_nom)
	local mes_num = {
		['gen'] = 1, ['jan'] = 1,
		['feb'] = 2,
		['mar'] = 3,
		['abr'] = 4, ['apr'] = 4,
		['mai'] = 5, ['may'] = 5,
		['jun'] = 6,
		['jul'] = 7,
		['ago'] = 8, ['ag'] = 8, ['aug'] = 8,
		['set'] = 9, ['sep'] = 9,
		['oct'] = 10,
		['nov'] = 11,
		['des'] = 12, ['dec'] = 12
	}
	local mes_abr = string.lower(string.sub(mes_nom, 1, 3))
	return mes_num[mes_abr]
end

local function formatLang(...)
	return mw.language.new('ca'):formatDate(...)
end

local function f(...)
	local success, data = pcall(formatLang, ...)
	if success then
		return data
	end
	return "<span style='color:red; font-weight:bold; font-style:italic'>Data incorrecta</span>[[Categoria:Pàgines amb error de referències per les dates]]"
end

function p.data_format(data, formata)
	if type(data) == "table" then -- des de plantilles via invoke o des de mòduls via require
		formata = data.args[2]
		data = require('Module:Delink')._delink(data.args)
	end
	if formata == '' then formata = nil end
	
	-- sense preposicions
	data = string.gsub(data, " del? ", " ")
	data = string.gsub(data, " d'", " ")
	
	local dataparts = mw.text.split(data, "[-/., ]+")
	if #dataparts == 3 then -- format precisió dia
		local part1 = tonumber(dataparts[1])
		local part2 = tonumber(dataparts[2])
		local part3 = tonumber(dataparts[3])
		local dia, mes, any
		if part1 and part2 and part3 then
			if part1 > 31 then -- format a m d
				any = part1
				mes = part2
				dia = part3
			elseif part2 > 12 then -- format m d a
				mes = part1
				dia = part2
				any = part3
			else -- format d m a
				dia = part1
				mes = part2
				any = part3
			end
		elseif part1 and part3 then -- format d mes a
			mes = mesNumero(dataparts[2])
			dia = part1
			any = part3
		elseif part2 and part3 then -- format mes d a
			mes = mesNumero(dataparts[1])
			dia = part2
			any = part3
		end
		
		if dia and mes and any and type(dia) == 'number' and type(mes) == 'number' and type(any) == 'number' then
			local datastr = dia .. '-' .. mes .. '-' .. any
			if formata == nil then
				formata = 'd-m-Y'
			elseif formata == 'consulta' then
				if dia == 1 then
					formata = 'j"r" F Y'
				else
					formata = 'j F Y'
				end
			end
			return f(formata, datastr)
		end
	elseif #dataparts == 2 then -- format precisió mes
		local part1 = tonumber(dataparts[1])
		local part2 = tonumber(dataparts[2])
		local mes, any
		if part1 and part2 then
			if part1 > 12 and part2 < 13 then -- format a m
				any = part1
				mes = part2
			elseif part1 < 13 and part2 > 12 then -- format m a
				mes = part1
				any = part2
			end
		else -- format mes a
			mes = mesNumero(dataparts[1])
			any = part2
		end
		if mes and any and type(mes) == 'number' and type(any) == 'number' then
			local datastr = '1-' .. mes .. '-' .. any
			if formata == nil then
				formata = 'n-Y'
			elseif formata == 'consulta' then
				formata = 'F Y'
			end
			return f(formata, datastr)
		end
	end
	
	return data
end

return p