Menu

Formato de data no PHP: todos os caracteres do date()

Um formato de data no PHP é uma string de letras como 'Y-m-d H:i:s', em que Y é o ano com 4 dígitos, m o mês, d o dia, H a hora, i os minutos e s os segundos. Aqui está cada caractere de formato com um exemplo, mais escape, ISO 8601, datas em japonês e conversão de um formato para outro.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Um formato de data no PHP é uma string em que letras representam partes da data: date('Y-m-d H:i:s') imprime algo como 2026-03-14 09:05:07. Y é o ano com 4 dígitos, m o mês, d o dia, H a hora (relógio de 24 horas), i os minutos e s os segundos; qualquer caractere que não seja uma letra de formato, como -, / ou :, é impresso como está. As mesmas strings de formato funcionam no date() e no DateTimeImmutable::format().

Mude $format e clique em Run. A data está fixa em sábado, 14 de março de 2026, às 09:05:07, para você ver exatamente o que cada letra faz:

Saída:

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

date($format) formata o momento atual e date($format, $timestamp) um timestamp; $date->format($format) formata um objeto de data. Todo o resto sobre datas, do strtotime() aos fusos horários, está na página sobre o date() do PHP.

Caracteres de formato de data

Cada exemplo abaixo é o resultado para 2026-03-14 09:05:07.123456 UTC.

Dia

CaractereSignificadoExemplo
dDia do mês, 2 dígitos com zero à esquerda (01 a 31)14
jDia do mês sem zero à esquerda (1 a 31)14
DNome curto do dia, 3 letrasSat
l (L minúsculo)Nome completo do diaSaturday
NDia da semana ISO, 1 (segunda) a 7 (domingo)6
wDia da semana, 0 (domingo) a 6 (sábado)6
SSufixo em inglês do dia: st, nd, rd ou th. Use depois de jth
zDia do ano, começando em 072

Semana e mês

CaractereSignificadoExemplo
WNúmero da semana ISO 8601 (semanas começam na segunda)11
FNome completo do mêsMarch
MNome curto do mês, 3 letrasMar
mNúmero do mês com zero à esquerda (01 a 12)03
nNúmero do mês sem zero à esquerda (1 a 12)3
tNúmero de dias do mês31

Ano

CaractereSignificadoExemplo
YAno completo, pelo menos 4 dígitos2026
yAno, 2 dígitos26
L1 se for ano bissexto, senão 00
oAno da numeração de semanas ISO 8601 (use com W)2026
XAno completo expandido com sinal (PHP 8.2+)+2026
xAno completo expandido, sinal só quando necessário (PHP 8.2+)2026

Hora

CaractereSignificadoExemplo
HHora, relógio de 24 horas, zero à esquerda (00 a 23)09
GHora, relógio de 24 horas, sem zero à esquerda (0 a 23)9
hHora, relógio de 12 horas, zero à esquerda (01 a 12)09
gHora, relógio de 12 horas, sem zero à esquerda (1 a 12)9
iMinutos com zero à esquerda (00 a 59)05
sSegundos com zero à esquerda (00 a 59)07
aam ou pmam
AAM ou PMAM
vMilissegundos123
uMicrossegundos (sempre 000000 no date(), que recebe segundos inteiros)123456
BSwatch Internet time (000 a 999)420

Fuso horário

CaractereSignificadoExemplo
eIdentificador do fuso horárioUTC
TAbreviação do fuso horárioUTC
PDiferença para UTC com dois pontos+00:00
pComo P, mas Z para UTCZ
ODiferença para UTC sem dois pontos+0000
ZDiferença em segundos0
I (i maiúsculo)1 durante o horário de verão, senão 00

Data e hora completas

CaractereSignificadoExemplo
cData e hora ISO 86012026-03-14T09:05:07+00:00
rData RFC 2822, usada em cabeçalhos de e-mailSat, 14 Mar 2026 09:05:07 +0000
UTimestamp Unix (segundos desde 1970-01-01 UTC)1773479107

A mesma tabela, ao vivo: este bloco imprime cada caractere para uma data que você escolher. Coloque o seu aniversário, uma data à tarde ou uma no fim de um ano bissexto:

Imprimir letras e palavras dentro de um formato

Qualquer letra numa string de formato é lida como caractere de formato, então 'Today is l' não imprime "Today is": T, o, d, a, y, i e s são todos caracteres de formato. Coloque uma barra invertida antes de cada letra que você quer imprimir como está. Numa string entre aspas duplas, \t já é um caractere de tabulação, então use aspas simples em formatos com barras invertidas:

Saída:

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

Formatos de data comuns

A maior parte do código precisa só de alguns formatos. Este bloco os imprime como tabela HTML, então eles aparecem na aba Page:

Guarde e compare datas como Y-m-d ou Y-m-d H:i:s: strings nessa ordem são ordenadas do mesmo jeito que as datas, o que não acontece com strings d/m/Y.

ISO 8601, DATE_ATOM e outros formatos padrão

O PHP tem constantes para os formatos que APIs, feeds e cookies esperam. DATE_ATOM (também DateTimeInterface::ATOM) é ISO 8601 e RFC 3339, o formato que as APIs JSON usam:

Saída:

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

Também existe uma constante DATE_ISO8601, mas o offset dela não tem dois pontos (+0000), o que a ISO 8601 não permite nessa forma; use DATE_ATOM.

Formato de data japonês (Y年m月d日)

Caracteres que não são letras de formato são impressos como estão, e isso inclui kanji, então 'Y年n月j日' funciona como está escrito. n e j tiram o zero à esquerda (3月14日), m e d o mantêm (03月14日). O nome do dia é a única parte que o date() não consegue traduzir, porque só conhece nomes em inglês; mapeie o número w para a sua própria lista:

Saída:

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

Para localização completa, incluindo nomes de meses em outros idiomas e a era japonesa (令和), o IntlDateFormatter da extensão intl formata com padrões de locale. Ele usa letras de padrão ICU (yyyy, MM, EEEE), não os caracteres do PHP desta 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日

Converter uma data de um formato para outro

Para transformar 14/03/2026 em 2026-03-14, faça o parse da string com o formato em que ela está escrita, usando DateTimeImmutable::createFromFormat(), e depois formate de novo. Ele usa os mesmos caracteres da tabela. Comece o formato com !, senão os campos que você não informou (a hora, aqui) são preenchidos com o momento atual:

Saída:

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

Para datas digitadas por usuários, trate qualquer aviso do getLastErrors() como data inválida, do mesmo jeito que você trata false.

Erros comuns com formatos de data

Três bugs aparecem o tempo todo: m onde se queria i, Y e y, e deixar o strtotime() adivinhar a ordem de dia e mês. O strtotime() lê barras na ordem americana mês/dia e hífens ou pontos na ordem dia-mês, então os mesmos dígitos dão duas datas diferentes:

Saída:

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

Quando você sabe o formato da entrada, diga isso com o createFromFormat() em vez de deixar o strtotime() adivinhar.

Perguntas frequentes

O que significa date('Y-m-d') no PHP?

Cada letra é substituída por uma parte da data: Y é o ano com 4 dígitos, m o mês com zero à esquerda e d o dia com zero à esquerda, e os hífens são impressos como estão. Em 14 de março de 2026 ele retorna 2026-03-14.

Como converto uma data de um formato para outro no PHP?

Faça o parse com o formato em que ela está e depois formate com o que você quer: DateTimeImmutable::createFromFormat('!d/m/Y', '14/03/2026')->format('Y-m-d') retorna 2026-03-14. O createFromFormat() retorna false quando a string não bate, então verifique isso antes.

Qual a diferença entre m e i num formato de data do PHP?

m é o mês (01 a 12) e i são os minutos (00 a 59). Escrever 'H:m' em vez de 'H:i' é um bug comum: a hora mostra o número do mês onde deveriam estar os minutos.

Como formato uma data em ISO 8601 no PHP?

Use o caractere c ou a constante DATE_ATOM: $date->format(DATE_ATOM) retorna 2026-03-14T09:05:07+00:00. Evite DATE_ISO8601: o offset dela não tem dois pontos (+0000), o que não é ISO 8601 válido.

Como mostro o dia da semana em japonês (ou em português) com o date() do PHP?

O date() só imprime nomes em inglês, então mapeie o número w (0 para domingo até 6 para sábado) para a sua própria lista: ['日','月','火','水','木','金','土'][$date->format('w')]. Com a extensão intl, o IntlDateFormatter formata datas inteiras em qualquer locale.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR