Menu

Formato de fecha en PHP: todos los caracteres de date()

Un formato de fecha de PHP es una cadena de letras como 'Y-m-d H:i:s', donde Y es el año con 4 dígitos, m el mes, d el día, H la hora, i los minutos y s los segundos. Aquí tienes todos los caracteres de formato con un ejemplo, además del escape, ISO 8601, las fechas en japonés y cómo convertir un formato en otro.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Un formato de fecha de PHP es una cadena en la que las letras representan partes de la fecha: date('Y-m-d H:i:s') imprime algo como 2026-03-14 09:05:07. Y es el año con 4 dígitos, m el mes, d el día, H la hora (reloj de 24 horas), i los minutos y s los segundos; cualquier carácter que no sea una letra de formato, como -, / o :, se imprime tal cual. Las mismas cadenas de formato funcionan en date() y en DateTimeImmutable::format().

Cambia $format y pulsa Ejecutar. La fecha está fijada en el sábado 14 de marzo de 2026 a las 09:05:07, así que puedes ver exactamente qué hace cada letra:

Salida:

Sat, 14 Mar 2026 09:05
2026-03-14
14/03/2026
Saturday, March 14th, 2026
9:05 AM

date($format) formatea el momento actual y date($format, $timestamp) un timestamp; $date->format($format) formatea un objeto de fecha. Todo lo demás sobre las fechas, de strtotime() a las zonas horarias, está en la página de PHP date().

Caracteres de formato de fecha

Cada ejemplo de abajo es el resultado para 2026-03-14 09:05:07.123456 UTC.

Día

CarácterSignificadoEjemplo
dDía del mes, 2 dígitos con cero inicial (01 a 31)14
jDía del mes sin cero inicial (1 a 31)14
DNombre corto del día, 3 letrasSat
l (L minúscula)Nombre completo del díaSaturday
NDía de la semana ISO, 1 (lunes) a 7 (domingo)6
wDía de la semana, 0 (domingo) a 6 (sábado)6
SSufijo inglés del día: st, nd, rd o th. Úsalo después de jth
zDía del año, empezando en 072

Semana y mes

CarácterSignificadoEjemplo
WNúmero de semana ISO 8601 (las semanas empiezan en lunes)11
FNombre completo del mesMarch
MNombre corto del mes, 3 letrasMar
mNúmero del mes con cero inicial (01 a 12)03
nNúmero del mes sin cero inicial (1 a 12)3
tNúmero de días del mes31

Año

CarácterSignificadoEjemplo
YAño completo, al menos 4 dígitos2026
yAño, 2 dígitos26
L1 si es año bisiesto, si no 00
oAño de numeración de semanas ISO 8601 (úsalo con W)2026
XAño completo ampliado con signo (PHP 8.2+)+2026
xAño completo ampliado, con signo solo cuando hace falta (PHP 8.2+)2026

Hora

CarácterSignificadoEjemplo
HHora, reloj de 24 horas, con cero inicial (00 a 23)09
GHora, reloj de 24 horas, sin cero inicial (0 a 23)9
hHora, reloj de 12 horas, con cero inicial (01 a 12)09
gHora, reloj de 12 horas, sin cero inicial (1 a 12)9
iMinutos con cero inicial (00 a 59)05
sSegundos con cero inicial (00 a 59)07
aam o pmam
AAM o PMAM
vMilisegundos123
uMicrosegundos (siempre 000000 en date(), que trabaja con segundos enteros)123456
BHora de internet Swatch (000 a 999)420

Zona horaria

CarácterSignificadoEjemplo
eIdentificador de la zona horariaUTC
TAbreviatura de la zona horariaUTC
PDesfase respecto a UTC con dos puntos+00:00
pComo P, pero Z para UTCZ
ODesfase respecto a UTC sin dos puntos+0000
ZDesfase en segundos0
I (i mayúscula)1 durante el horario de verano, si no 00

Fecha y hora completas

CarácterSignificadoEjemplo
cFecha y hora ISO 86012026-03-14T09:05:07+00:00
rFecha RFC 2822, usada en las cabeceras de emailSat, 14 Mar 2026 09:05:07 +0000
UTimestamp Unix (segundos desde 1970-01-01 UTC)1773479107

La misma tabla, en vivo: este bloque imprime todos los caracteres para una fecha que elijas. Pon tu cumpleaños, una fecha por la tarde o una al final de un año bisiesto:

Imprimir letras y palabras dentro de un formato

Cualquier letra de una cadena de formato se lee como un carácter de formato, así que 'Today is l' no imprime "Today is": T, o, d, a, y, i y s son todos caracteres de formato. Pon una barra invertida delante de cada letra que quieras imprimir tal cual. En una cadena entre comillas dobles, \t ya es un tabulador, así que usa comillas simples para los formatos con barras invertidas:

Salida:

UTC202614am26 0507 Saturday
Today is Saturday
Saturday the 14th of March
2026-03-14T09:05:07
Saturday 	09UTC 14th

Formatos de fecha habituales

La mayor parte del código solo necesita unos pocos formatos. Este bloque los imprime como una tabla HTML, así que aparece en la pestaña Página:

Guarda y compara las fechas como Y-m-d o Y-m-d H:i:s: las cadenas en ese orden se ordenan igual que las fechas, algo que no pasa con las cadenas d/m/Y.

ISO 8601, DATE_ATOM y otros formatos estándar

PHP tiene constantes para los formatos que esperan las APIs, los feeds y las cookies. DATE_ATOM (también DateTimeInterface::ATOM) es ISO 8601 y RFC 3339, el formato que usan las APIs JSON:

Salida:

2026-03-14T09:05:07+00:00
2026-03-14T09:05:07+00:00
2026-03-14T09:05:07.000+00:00
Sat, 14 Mar 2026 09:05:07 +0000
Sat, 14 Mar 2026 09:05:07 +0000
Saturday, 14-Mar-2026 09:05:07 UTC
Y-m-d\TH:i:sP

También existe una constante DATE_ISO8601, pero su desfase no lleva dos puntos (+0000), algo que ISO 8601 no permite en esa forma; usa DATE_ATOM.

Formato de fecha japonés (Y年m月d日)

Los caracteres que no son letras de formato se imprimen tal cual, y eso incluye los kanji, así que 'Y年n月j日' funciona tal como está escrito. n y j quitan el cero inicial (3月14日), y m y d lo conservan (03月14日). El nombre del día es la única parte que date() no puede traducir, porque solo conoce los nombres en inglés; asigna en su lugar el número w a tu propia lista:

Salida:

2026年3月14日
2026年03月14日 09時05分
2026年3月14日(土)
2026/03/14

Para una localización completa, incluidos los nombres de los meses en otros idiomas y la era japonesa (令和), el IntlDateFormatter de la extensión intl formatea con patrones según el idioma. Usa letras de patrón ICU (yyyy, MM, EEEE), no los caracteres de PHP de esta página:

<?php
$formatter = new IntlDateFormatter('ja_JP', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Asia/Tokyo');
echo $formatter->format(new DateTimeImmutable('2026-03-14')); // 2026年3月14日土曜日

$era = new IntlDateFormatter('ja_JP@calendar=japanese', IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'Asia/Tokyo', IntlDateFormatter::TRADITIONAL);
echo $era->format(new DateTimeImmutable('2026-03-14'));       // 令和8年3月14日

Convertir una fecha de un formato a otro

Para convertir 14/03/2026 en 2026-03-14, analiza la cadena con el formato en el que está escrita usando DateTimeImmutable::createFromFormat(), y luego vuelve a formatearla. Usa los mismos caracteres que la tabla. Empieza el formato con !, o los campos que no indicaste (aquí, la hora) se rellenan con el momento actual:

Salida:

2026-03-14 00:00:00
March 14, 2026
bool(false)
2026-03-03
Array
(
    [10] => The parsed date was invalid
)

Con las fechas que escriben los usuarios, trata cualquier warning de getLastErrors() como una fecha no válida, igual que tratas false.

Errores frecuentes con los formatos de fecha

Tres bugs aparecen una y otra vez: m donde querías i, Y frente a y, y dejar que strtotime() adivine el orden del día y el mes. strtotime() lee las barras como el orden americano mes/día y los guiones o puntos como el orden día-mes, así que los mismos dígitos dan dos fechas distintas:

Salida:

09:03:07
09:05:07
14/03/26
2026-03-04
2026-04-03
bool(false)

Cuando conozcas el formato de la entrada, indícalo con createFromFormat() en lugar de dejar que strtotime() adivine.

Preguntas frecuentes

¿Qué significa date('Y-m-d') en PHP?

Cada letra se sustituye por una parte de la fecha: Y es el año con 4 dígitos, m el mes con cero inicial y d el día con cero inicial, y los guiones se imprimen tal cual. El 14 de marzo de 2026 devuelve 2026-03-14.

¿Cómo convierto una fecha de un formato a otro en PHP?

Analízala con el formato en el que está y luego formatéala con el que quieres: DateTimeImmutable::createFromFormat('!d/m/Y', '14/03/2026')->format('Y-m-d') devuelve 2026-03-14. createFromFormat() devuelve false cuando la cadena no coincide, así que compruébalo primero.

¿Cuál es la diferencia entre m e i en un formato de fecha de PHP?

m es el mes (01 a 12) e i son los minutos (00 a 59). Escribir 'H:m' en lugar de 'H:i' es un bug habitual: la hora muestra el número del mes donde deberían ir los minutos.

¿Cómo formateo una fecha como ISO 8601 en PHP?

Usa el carácter c o la constante DATE_ATOM: $date->format(DATE_ATOM) devuelve 2026-03-14T09:05:07+00:00. Evita DATE_ISO8601: su desfase no lleva dos puntos (+0000), lo que no es ISO 8601 válido.

¿Cómo muestro el día de la semana en japonés con date() de PHP?

date() solo imprime nombres en inglés, así que asigna el número w (0 para el domingo a 6 para el sábado) a tu propia lista: ['日','月','火','水','木','金','土'][$date->format('w')]. Con la extensión intl, IntlDateFormatter puede formatear fechas completas en cualquier idioma.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR