Contenido del curso
Cookies y sesiones
Manejo de excepciones
Trabajando con fechas
Modularización
- 16

Modularización de código en PHP con archivos
18:41 min - 17

Namespaces en PHP para evitar clases repetidas
16:15 min - 18

Autocarga de archivos con Composer y PSR-4
15:05 min - 19

Qué es un front controller en PHP
08:56 min - 20

URLs limpias con htaccess en PHP
17:28 min - 21

Traits en PHP: reutiliza métodos sin herencia
17:13 min
Cierre
Funciones de fechas útiles en PHP
Resumen
Trabajar con fechas en PHP va mucho más allá de imprimir el día actual. Cuando dominas funciones como date, strftime y la configuración de zonas horarias, puedes convertir frases en inglés como next Monday en fechas exactas y manipularlas con la precisión que necesite tu aplicación.
Esta guía recorre las funciones de fechas en PHP que más vas a usar en proyectos reales: definir tu zona horaria, obtener la fecha actual en distintos formatos, transformar lenguaje humano a Unix timestamp y trabajar con objetos inmutables.
Cómo configuro la zona horaria en PHP
Por defecto, PHP toma la zona horaria del servidor donde corre tu código. Pero casi siempre vas a querer fijarla tú mismo para evitar sorpresas cuando despliegues a producción.
La función que te interesa es date_default_timezone_set, que recibe un string con el identificador de la zona [01:30].
php date_default_timezone_set('America/Mexico_City');
La documentación oficial lista todas las zonas admitidas agrupadas por continente: America/Mexico_City, America/Havana, America/Guatemala, America/Montevideo y muchas más. Si necesitas leer la zona activa, usa su contraparte date_default_timezone_get.
¿Para qué sirve
date_default_timezone_set? Define la zona horaria que PHP usará en todas las funciones de fecha y hora durante la ejecución del script, sin depender del servidor.
Cuál es la diferencia entre date y date_create
Ambas obtienen la fecha actual, pero devuelven cosas distintas. Y esa diferencia decide cuál vas a usar.
La función date recibe un formato y te devuelve directamente un string listo para imprimir [04:20]:
php $now = date('Y-m-d H:i:s'); echo $now; // 2022-04-19 10:22:10
Las letras del formato (Y, m, d, H, i, s) las consultas en la documentación. Puedes cambiar los separadores por diagonales, puntos o lo que necesites: el formato Y-m-d H:i:s es el más común porque es el que aceptan la mayoría de bases de datos.
En cambio, date_create te devuelve un objeto de tipo DateTime, no un string. Si intentas hacer echo directamente, obtendrás un fatal error porque un objeto DateTime no se convierte a texto automáticamente.
- Usa
datecuando solo quieras imprimir o mostrar una fecha. - Usa
date_createonew DateTime()cuando necesites manipular la fecha (sumar días, comparar, etc.). - El estilo orientado a objetos con
new DateTime()es el más recomendado para trabajar.
Cómo convierto texto en inglés a Unix timestamp con strftime
Aquí viene lo interesante. La función strftime (en su uso con strtotime para parseo) convierte una descripción de fecha y hora escrita en inglés a un Unix timestamp, es decir, los segundos transcurridos desde el 1 de enero de 1970 [07:15].
El formato Unix es ese número enorme que representa una fecha como cantidad de segundos. Y strftime acepta lenguaje sorprendentemente humano:
php echo strftime('17 April 2022'); echo strftime('17 April 2022 +1 week'); echo strftime('next Monday'); echo strftime('last Wednesday');
Cada una devuelve el timestamp correspondiente. Eso sí, las fechas con hora deben usar dos puntos como separador (10:22:10), no guiones; si pones guiones donde van dos puntos, la función no devuelve nada porque el formato no es válido [08:40].
¿Qué es un Unix timestamp? Es un número entero que cuenta los segundos transcurridos desde el 1 de enero de 1970 hasta una fecha dada. Es el formato estándar que entienden las funciones de fecha del lenguaje.
Cómo combino strftime con date para fechas legibles
El truco está en encadenar las dos funciones: strftime traduce el texto humano a timestamp y date lo convierte de vuelta a un string con el formato que tú elijas [11:50].
php $unixTime = strftime('next Monday'); echo date('Y-m-d H:i:s', $unixTime); // 2022-04-25 00:00:00
Algunos ejemplos prácticos del flujo:
last Wednesdaydevuelve el miércoles pasado (por ejemplo, 13 de abril).next Mondaydevuelve el siguiente lunes (por ejemplo, 25 de abril).17 April 2022 +1 weekdevuelve el 26 de abril.17 April 2022devuelve, literal, el 17 de abril.
Fíjate que cuando no especificas hora, date te imprime 00:00:00. Es lógico: solo le diste el día.
Qué son las fechas inmutables en PHP
Las fechas inmutables son instancias de la clase DateTimeImmutable, idénticas a DateTime con una sola diferencia clave: no se pueden modificar después de crearse [13:30].
php $dateImmutable = new DateTimeImmutable();
¿Cuándo te conviene? Cuando trabajes con una fecha que no debe cambiar accidentalmente durante la ejecución, por ejemplo la fecha de creación de un registro o un timestamp de auditoría. Si intentas modificarla, PHP te devolverá una nueva instancia en lugar de alterar la original.
¿Cuándo uso DateTimeImmutable en vez de DateTime? Úsala cuando quieras proteger una fecha de cambios accidentales. Es la misma API, pero cualquier modificación devuelve un objeto nuevo en lugar de mutar el existente.
Con estas piezas ya puedes definir tu zona horaria, obtener la fecha actual en cualquier formato, traducir frases en inglés a timestamps y proteger fechas críticas con objetos inmutables. ¿Cuál de estas funciones vas a integrar primero en tu proyecto? Cuéntamelo en los comentarios.