W3docs

date()

Las funciones de fecha y hora son esenciales en PHP. En este artículo exploramos las principales funciones de fecha y hora disponibles en PHP.

Introducción

Casi toda aplicación necesita en algún momento mostrar, almacenar o comparar una fecha: una línea "publicado el", una cuenta regresiva, una verificación de caducidad. Este capítulo explica cómo funcionan las herramientas de fecha y hora de PHP y cuándo usar cada una. Comenzamos con las funciones más habituales — date(), time() y strtotime() — luego pasamos a manipular y comparar fechas, y terminamos con las partes que más suelen confundir: las zonas horarias y el horario de verano.

Trabajo con fechas en PHP

PHP ofrece dos conjuntos de herramientas complementarios para las fechas:

  • Funciones proceduralesdate(), time(), mktime() y strtotime() — que trabajan con un timestamp Unix (un entero simple: el número de segundos transcurridos desde el 1 de enero de 1970 UTC). Son rápidas para formateo y aritmética sencilla.
  • La API orientada a objetos DateTime — las clases DateTime, DateInterval y DateTimeZone — que resulta más legible para todo lo que involucra intervalos, comparaciones o zonas horarias, y es el enfoque recomendado para código nuevo.

Este capítulo utiliza ambos estilos para que puedas reconocerlos en bases de código reales.

La función date()

La función date() convierte un timestamp en una cadena con formato. Acepta una cadena de formato como primer parámetro y un timestamp opcional como segundo; si se omite el timestamp, date() usa la hora actual.

php— editable, runs on the server

Esto muestra la fecha actual en el formato "Mes Día, Año", como March 3, 2023.

Cada letra de la cadena de formato es un marcador de posición. La tabla siguiente lista los caracteres que usarás con más frecuencia:

CarácterSignificadoEjemplo
YAño de 4 dígitos2023
yAño de 2 dígitos23
mMes, 2 dígitos (01–12)03
nMes, sin cero inicial3
FNombre completo del mesMarch
MNombre corto del mesMar
dDía del mes, 2 dígitos03
jDía del mes, sin cero inicial3
lNombre completo del día de la semanaFriday
HHora, formato 24h, 2 dígitos14
hHora, formato 12h, 2 dígitos02
iMinutos, 2 dígitos09
sSegundos, 2 dígitos05
AAM / PMPM

Cualquier carácter que no sea un marcador reconocido se imprime literalmente, por lo que date("Y-m-d H:i:s") produce un valor como 2023-03-03 14:09:05. Para imprimir una letra literal que de otro modo sería un marcador, escápala con una barra invertida: date('l \t\h\e jS'). Para la lista completa de marcadores, consulta el capítulo date-format().

La función time()

La función time() devuelve el timestamp Unix actual — el número de segundos transcurridos desde el 1 de enero de 1970 UTC. No recibe argumentos y es el punto de partida habitual para la aritmética de fechas, porque los enteros son fáciles de sumar y comparar.

php— editable, runs on the server

Esto muestra el timestamp Unix actual, un entero largo como 1646369616. Combínalo con date() para formatear "ahora": date("Y-m-d", time()). Consulta el capítulo time() para más detalles.

La función strtotime()

La función strtotime() analiza una fecha textual en inglés — "March 3, 2023", "next Monday", "+2 weeks" — y devuelve el timestamp Unix correspondiente. Es notablemente flexible, lo que la hace muy útil para convertir entradas humanas en un timestamp que puedas formatear o comparar.

php— editable, runs on the server

Esto muestra el timestamp Unix para el 3 de marzo de 2023: 1677801600.

Precaución: si strtotime() no puede analizar la cadena, devuelve false, no un error. Siempre verifica el resultado antes de usarlo — if (($ts = strtotime($input)) === false) { /* fecha inválida */ } — de lo contrario false se convierte silenciosamente en 0, que se formatea como 1 de enero de 1970. Consulta el capítulo strtotime() para conocer toda la gramática que acepta.

Manipulación de fechas en PHP

Además de formatear fechas, PHP también ofrece una variedad de funciones para manipularlas. Estas funciones permiten sumar o restar tiempo a una fecha, comparar fechas y mucho más.

Suma y resta de tiempo con strtotime()

strtotime() hace más que analizar fechas fijas — también entiende expresiones relativas. Pasa un timestamp base como segundo argumento y una expresión como "+1 day", "-3 weeks" o "first day of next month" como primero, y obtendrás un nuevo timestamp.

php— editable, runs on the server

Esto mostrará la fecha un día después del 3 de marzo de 2023, que es "March 4, 2023".

Los métodos DateTime::add() y DateTime::sub()

Los métodos orientados a objetos DateTime::add() y DateTime::sub() suman o restan un DateInterval a un objeto DateTime. Un DateInterval se construye a partir de una cadena de duración ISO 8601: P1D significa "un período de 1 día", P2W son dos semanas y PT1H30M es una hora y treinta minutos (la T separa la parte de fecha de la parte de hora).

Este estilo es preferido en código nuevo porque la operación se lee como una oración y el objeto lleva su propia zona horaria.

php— editable, runs on the server

Esto muestra la fecha un día después del 3 de marzo de 2023: March 4, 2023. Los capítulos dedicados date-add() y date-sub() profundizan en el tema, y date-diff() muestra cómo obtener el intervalo entre dos objetos DateTime.

Comparación de fechas en PHP

Dado que los timestamps son enteros simples, puedes comparar dos fechas con los operadores ordinarios <, > y == una vez que ambos lados sean timestamps. Convierte cada cadena de fecha con strtotime() primero.

php— editable, runs on the server

Esto muestra Date 1 is earlier than Date 2. Para comparar objetos DateTime puedes usar los mismos operadores directamente ($a < $b) sin convertir a timestamps.

Zonas horarias y horario de verano

La parte más complicada de trabajar con fechas es asegurarse de que hagan referencia al mismo momento en distintas regiones. date() y time() interpretan los timestamps en la zona horaria predeterminada configurada en PHP, por lo que es importante que ese ajuste sea correcto.

La función date_default_timezone_set()

date_default_timezone_set() establece la zona horaria predeterminada utilizada por todas las funciones de fecha y hora durante el resto de la solicitud. Llámala una vez, al inicio de tu script, y pasa un identificador IANA válido como America/New_York o Europe/London.

<?php
    date_default_timezone_set("America/New_York");
    echo date("Y-m-d H:i:s");
?>

Una lista de identificadores válidos se encuentra en el capítulo php-timezones; cómo leer la configuración actual se cubre en date-default-timezone-get().

La clase DateTimeZone

Cuando necesitas distintas zonas horarias en el mismo script — por ejemplo, mostrar la hora de un evento a usuarios en varias regiones — establecer una zona predeterminada no es suficiente. La clase DateTimeZone permite que un objeto DateTime específico lleve su propia zona:

<?php
    $timezone = new DateTimeZone("America/New_York");
    $date = new DateTime("2023-03-03 09:00", $timezone);
    echo $date->format("Y-m-d H:i T");
?>

Esto formatea la fecha en hora de Nueva York e imprime la abreviatura de la zona (T), por ejemplo 2023-03-03 09:00 EST.

Trabajo con el horario de verano

El horario de verano (DST) adelanta o atrasa el reloj, por lo que el desplazamiento para una zona como America/New_York no es fijo (EST vs EDT). PHP gestiona el cambio automáticamente siempre que uses una zona con nombre en lugar de un desplazamiento codificado directamente. El carácter de formato I (i mayúscula) de date() indica si el horario de verano está en vigor actualmente: 1 si lo está, 0 si no.

php— editable, runs on the server

Esto muestra si el horario de verano está o no en vigor para la zona horaria predeterminada actual.

Conclusión

Ahora tienes el conjunto de herramientas básico para fechas en PHP: date() para formatear, time() y strtotime() para obtener y analizar timestamps, la familia DateTime para sumar, restar y comparar, y DateTimeZone para gestionar distintas regiones. Como regla general, usa las funciones procedurales para formateo rápido y puntual, y la API orientada a objetos DateTime para todo lo que involucre intervalos, comparaciones o múltiples zonas horarias. Para un recorrido más amplio, consulta PHP Date and Time.

Práctica

Práctica
¿Cuáles son los formatos válidos que puede usar la función date() en PHP?
¿Cuáles son los formatos válidos que puede usar la función date() en PHP?
Was this page helpful?