PHP ofrece un robusto conjunto de funciones integradas para trabajar con fechas y horas, permitiendo recuperar y manipular información temporal del servidor.
Zonas Horarias y Configuración
El mundo se divide en 24 zonas horarias. Para la comunicación internacional, se utiliza el Tiempo Universal Coordinado (UTC), equivalente al Meridiano de Greenwich. Por defecto, PHP opera en la zona horaria cero. Para obtener la hora local correcta, es necesario configurar la zona horaria en la aplicación PHP.
Existen varias maneras de ajustar la zona horaria:
- Modificación de
php.ini: Edite el archivo de configuración de PHP, busque la directivadate.timezonebajo la sección[Date]y asígnele un valor comoAsia/HongKong`. Reinicie el servidor web (por ejemplo, Apache) para que los cambios surtan efecto. - Configuración en la aplicación: Utilice la función
date\_default\_timezone\_set(timezone);antes de invocar cualquier función relacionada con fechas u horas. El parámetrotimezonedebe ser un nombre de zona horaria válido reconocido por PHP; de lo contrario, se usará UTC. - Configuración dinámica con
ini_set(): Modifique la zona horaria de forma temporal dentro del script medianteini\_set('date.timezone', 'America/New\_York');.
Funciones Clave para Fechas y Tiempos
1. Obtención de Marcas de Tiempo (Timestamps)
-
mktime(hour, minute, second, month, day, year, is_dst): Coniverte componentes de fecha y hora en una marca de tiempo Unix. Si no se proporcionan argumentos, devuelve la marca de tiempo de la hora actual. ```echo "Marca de tiempo generada: " . mktime(); echo "Fecha actual: " . date("Y-m-d", mktime()) . "";
-
time(): Devuelve la marca de tiempo Unix actual (segundos transcurridos desde el 1 de enero de 1970, 00:00:00 UTC). ```$timestampActual = time(); echo "Marca de tiempo actual: " . $timestampActual . "";
2. Formato y Recuperación de Información de Fecha
-
date(format, timestamp): Formatea una marca de tiempo Unix en una cadena de fecha legible. Sitimestampse omite, se usa la hora actual. Formatos comunes:Y: Año con 4 dígitos (ej. 2023)m: Mes con 2 dígitos (ej. 01 para enero)d: Día del mes con 2 dígitos (ej. 05)H: Hora en formato 24 horas (ej. 14)i: Minutos con 2 dígitos (ej. 09)s: Segundos con 2 dígitos (ej. 01)l(letra L minúscula): Día de la semana completo (ej. Monday)D: Día de la semana abreviado (ej. Mon)F: Mes completo (ej. January)M: Mes abreviado (ej. Jan)
echo "Fecha actual formateada: " . date("Y-m-d H:i:s") . "<br></br>"; echo "Formato alternativo: " . date("d/m/Y, g:i A") . "<br></br>"; -
getdate(timestamp): Devuelve un array asociativo con información detallada de una fecha y hora. Si no se especificatimestamp, se usa la hora actual. ```$infoFecha = getdate(); echo "Año: " . $infoFecha['year'] . ""; echo "Mes: " . $infoFecha['mon'] . ""; echo "Día del mes: " . $infoFecha['mday'] . ""; echo "Día de la semana (numérico, 0=domingo): " . $infoFecha['wday'] . ""; echo "Nombre del día: " . $infoFecha['weekday'] . "";
3. Validación y Análisis de Fechas
-
checkdate(month, day, year): Verifica si una fecha dada es válida en el calendario gregoriano. Devuelvetruesi es válida,falseen caso contrario. ```if (checkdate(2, 29, 2024)) { echo "El 29 de febrero de 2024 es una fecha válida."; } else { echo "El 29 de febrero de 2024 NO es una fecha válida."; }
-
strtotime(time, now): Convierte una cadena de texto que representa una fecha y hora en una marca de tiempo Unix. Es muy flexible con los formatos de entrada. ```echo "Timestamp para 'now': " . strtotime("now") . ""; echo "Timestamp para '2024-03-15 10:30:00': " . strtotime("2024-03-15 10:30:00") . ""; echo "Timestamp para '+1 week': " . strtotime("+1 week") . ""; echo "Fecha formateada de 'tomorrow': " . date("Y-m-d", strtotime("tomorrow")) . "";
4. Internacionalización de Fechas
Para mostrar fechas y horas según las convenciones locales, se utilizan las funciones setlocale y strftime.
-
setlocale(category, locale): Establece las reglas de localización para diferentes categerías.LC\_TIMEes la categoría relevante para la fecha y hora. ```// Ejemplo para configurar localización en español (puede variar el nombre del locale) setlocale(LC_TIME, 'es_ES.UTF-8', 'Spanish_Spain', 'es');
-
strftime(format, timestamp): Formatea una fecha y hora según la configuración de localización actual y un formato especificado. ```echo "Fecha local formateada: " . strftime("%A, %d de %B de %Y, %H:%M:%S") . "";
Los códigos de formato para `strftime` difieren de los de `date()` y están definidos por el estándar POSIX.