Module:Date

local p ={}

function p.norm_day(day) if day:len < 2 then return '0' .. day end return day end

function p.norm_month(month) -- Revisa si es número if month:len < 3 then -- Normaliza los "1" a "01" if month:len < 2 then return '0' .. month end end -- Convierte a mes corto (enero = ene) month = string.sub(month, 0, 3) -- Convierte mes corto (ene) a número (01) if month == 'ene' then return '01' elseif month == 'feb' then return '02' elseif month == 'mar' then return '03' elseif month == 'abr' then return '04' elseif month == 'may' then return '05' elseif month == 'jun' then return '06' elseif month == 'jul' then return '07' elseif month == 'ago' then return '08' elseif month == 'sep' then return '09' elseif month == 'oct' then return '10' elseif month == 'nov' then return '11' elseif month == 'dic' then return '12' end return month end

function p.norm_year(year) -- Revisa si es año largo if year:len < 4 then year = year:sub(0, 2) if tonumber(year) >= 70 then year = "19" .. year else year = "20" .. year end end return year end

-- Normaliza la entrada de datos function p.fixformat(date) -- Quita la hora de la fecha if date:find(":") ~= nil then local temp_date = mw.text.split(date, ' ') date = temp_date[1] end -- Convierte a minúsculas -- date = date:lower -- Quita los de y del date = date:gsub(' del ',' ') date = date:gsub(' de ',' ') -- Corrige el string local fixed_date = '' local is_num = true local slash_counter = 0 for i = 1, string.len(date) do       local s = date:sub(i,i) local c = s:byte if tonumber(s) ~= nil then fixed_date = fixed_date .. s           is_num = true elseif c >= 97 and c <= 122 then fixed_date = fixed_date .. s           is_num = true elseif is_num == true then if slash_counter < 2 then fixed_date = fixed_date .. "/"               slash_counter = slash_counter + 1 end is_num = false end end

date = fixed_date return date end

-- fecha, corregir_inverso, imprimir_invertido) function p.format(frame)   local date = p.fixformat(frame.args[1])    -- Convierte string en arreglo    local d = mw.text.split(date, '/')    -- Corrige las fechas invertidas (ej: 2017-08-01)    if frame.args[2] == "true" then        local inverted_d = mw.text.split(date, '/')        d[1] = inverted_d[3]        d[2] = inverted_d[2]        d[3] = inverted_d[1]    end    -- Normaliza los días    -- Convierte los "1" en "01"    d[1] = p.norm_day(d[1])    -- Normaliza los meses    -- Convierte "enero" a "ene" y    -- convierte los "1" en "01"    d[2] = p.norm_month(d[2])    -- Normaliza los años    d[3] = p.norm_year(d[3])    -- Imprime las fechas invertidas (ej: 2017-08-01)    if frame.args[3] == "true" then        return d[3] .. '-' .. d[2] .. '-' .. d[1]    else        return d[1] .. '/' .. d[2] .. '/' .. d[3]    end end

return p