En Lua, no existe un tipo de fecha incorporado. Las fechas se manejan mediante marcas de tiempo (timestamps) o tablas con campos como año, mes, día, hora, minuto y segundo.
La biblioteca luaDate proporciona un conjunto de funciones que admiten tanto cadenas de formato de fecha como tablas para facilitar la manipulación de fechas.
Todas las funciones operan con precisión de segundos. Para cálculos en milisegundos, se recomienda usar os.clock(), común en mediciones de rendimiento.
Funciones Disponibles
| Función | Descripción |
|---|---|
| luaDate.timestamp | Obtiene la marca de tiempo a partir de una cadena o tabla de fecha. |
| luaDate.isDate | Verifica si un valor represanta una fecha válida. |
| luaDate.split | Descompone una fecha en componentes individuales. |
| luaDate.format | Formatea una fecha según un patrón específico. |
| luaDate.comput | Calcula una nueva fecha sumando o restando unidades de tiempo. |
| luaDate.diff | Calcula la diferencia en segundos entre dos fechas. |
luaDate.timestamp(d)
Obtiene la marca de tiempo numérica a partir de una entrada de fecha.
Parámetros: d puede ser una cadena con formato de fecha (ej: "2023-09-15 08:45:30") o una tabla con campos year, month, day, y opcionalmnete hour, min, sec.
Retorna: Un número o nil si la entrada no es válida.
local marca_actual = luaDate.timestamp() -- Marca de tiempo del momento actual
local tabla_fecha = {year=2023, month=9, day=15, hour=8, min=45, sec=30}
local desde_tabla = luaDate.timestamp(tabla_fecha) -- Desde tabla
local desde_cadena = luaDate.timestamp("2023/09/15 08:45:30") -- Desde cadena
luaDate.isDate(d)
Comprueba si el argumento representa una fecha válida, ya sea como marca de tiempo, cadena o tabla.
Parámetros: d es un valor a evaluar.
Retorna: true o false.
local es_valida = luaDate.isDate(1694748330) -- true para marca de tiempo
local es_cadena = luaDate.isDate("2023-09-15 08:45:30") -- true para cadena
local es_tabla = luaDate.isDate({year=2023, month=9, day=15}) -- true para tabla
luaDate.split(d)
Desglosa una fecha en sus componentes estructurales.
Parámetros: d debe ser una marca de tiempo, cadena o tabla de fecha.
Retorna: Una tabla con campos como sec, min, hour, day, month, year, wday (día de la semana), yday (día del año), isdst (horario de verano).
local componentes = luaDate.split("2023-09-15 08:45:30")
-- Resultado ejemplo: {sec=30, min=45, hour=8, day=15, month=9, year=2023, wday=6, yday=258, isdst=false}
luaDate.format(d, patron)
Genera una representación de cadena de una fecha según un patrón.
Parámetros: d es la fecha (marca de tiempo, cadena o tabla), y patron es una cadena con especificadores como yyyy, mm, dd, hh, MM, ss.
Retorna: Una cadena formateada o nil.
local formato_es = luaDate.format(1694748330, "yyyy-mm-dd HH:MM:SS") -- "2023-09-15 08:45:30"
local formato_personalizado = luaDate.format({year=2023, month=9, day=15, hour=8, min=45, sec=30}, "dd/mm/yyyy") -- "15/09/2023"
luaDate.comput(d, ajuste)
Calcula una nueva fecha aplicando ajustes a los componentes tepmorales.
Parámetros: d es la fecha base, y ajuste es una tabla con valores a sumar o restar para year, month, day, hour, min, sec.
Retorna: Una tabla de fecha modificada.
local fecha_base = luaDate.timestamp("2023-09-15 08:45:30")
local fecha_manana = luaDate.comput(fecha_base, {day=1}) -- Sumar un día
local fecha_anterior = luaDate.comput("2023-09-15", {month=-2}) -- Restar dos meses
luaDate.diff(d1, d2)
Calcula la diferencia en segundos entre dos fechas.
Parámetros: d1 y d2 son fechas en cualquier formato admitido.
Retorna: Un número entero con la diferencia (d1 - d2), o nil si hay error.
local diferencia = luaDate.diff("2023-09-15 09:00:00", "2023-09-15 08:45:00") -- Resultado: 900 (15 minutos)