Ir al contenido

Módulo:Fecha

Dendi Güiquipeya

La documentación para este módulo puede ser creada en Módulo:Fecha/doc

local z = {}

local meses = {
       'enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre'}

function z.fechaActual()
	local d = os.date('!*t')
	
	local fecha = {}
	fecha.anyo    = d.year
	fecha.mes     = d.month
	fecha.dia     = d.day
	fecha.hora    = d.hour
	fecha.minuto  = d.min
	fecha.segundo = d.sec
		
	return fecha
end

function validar(fecha)
	fecha.anyo    = tonumber(fecha.anyo)
	fecha.mes     = tonumber(fecha.mes)
	fecha.dia     = tonumber(fecha.dia)
	fecha.hora    = tonumber(fecha.hora)
	fecha.minuto  = tonumber(fecha.minuto)
	fecha.segundo = tonumber(fecha.segundo)
	
	-- Falta validar que es una fecha válida
end

function z.edad(fecha1, fecha2)
	--Función que devuelve la edad en años entre dos fechas
	
	--Se supone que las fechas se han validado previamente.
	
	if not fecha1 then
		return -- falta devolver un error
	end
	
	if not fecha2 then
		fecha2=z.fechaActual()
	end
	
	local anyos = fecha2.anyo - fecha1.anyo
	
	-- El año 0 no existe, por lo que no se debe contar
	if fecha1.anyo < 0 and fecha2.anyo > 0 then
		anyos = anyos - 1
	end
	
	--if true then return require('Módulo:Tablas').tostring(fecha2) end
	
	if fecha2.mes < fecha1.mes or
	   (fecha2.mes == fecha1.mes and fecha2.dia < fecha1.dia) then
	   	anyos = anyos - 1
	end
	
	if anyos < 0 then
		return -- falta devolver error
	elseif anyos == 0 then
		return 'menos de un año'
	elseif anyos == 1 then
		return 'un año'
	else
		return anyos .. ' años'
	end
end

function z.llamadaDesdeUnaPlantilla(frame)
	function obtenerFecha(dia, mes, anyo)
		local resultado={}
	
		if dia then
			resultado.dia  = dia
			resultado.mes  = mes
			resultado.anyo = anyo
			
			validar(resultado)
			
			return resultado
		end
	end

	local args = frame.args
	
	local funcion = z[args[1]]
	local fecha1  = obtenerFecha(args[2], args[3], args[4])
	local fecha2  = obtenerFecha(args[5], args[6], args[7])

	return funcion(fecha1, fecha2)
end
       
return z