Como corrigir a formatação de data do Date Field no ACF PRO
O que é formatação de data do Date Field no ACF PRO?
O ACF date picker (Date Field) é o campo do ACF PRO que guarda uma data escolhida em um calendário. Ele tem duas configurações de formato distintas que confundem a maioria dos casos: o Display Format, que define como a data aparece para quem seleciona no painel, e o Return Format, que define como a data volta quando você carrega o valor com get_field ou the_field no template. Segundo a documentação oficial do ACF, o valor é sempre salvo no banco no formato Ymd, ou seja, 20240101 para primeiro de janeiro de 2024, independente do que está configurado na tela.
O formato de data errado aparece quando o Return Format do campo não corresponde ao que o template espera mostrar. Se o Return Format está em Ymd, o get_field devolve a string crua 20240101 e a data sai como um número sem barras. Se o Return Format está em d/m/Y mas o desenvolvedor reformata por cima assumindo outro padrão, a data sai invertida, por exemplo mês e dia trocados. O problema é de configuração e de leitura do valor, não um defeito do plugin: o ACF entrega exatamente o formato que foi pedido no Return Format.
Como identificar
- A data aparece no frontend como um número cru sem separadores, no estilo ‘20240101’, em vez de uma data legível.
- A data sai invertida no template: o dia aparece no lugar do mês, como ’01/03/2024′ virando ’03/01/2024′.
- O nome do mês aparece em inglês, como ‘January’, mesmo com o site em português.
- A data exibida no painel do ACF está correta, mas a mesma data sai diferente no frontend do site.
- Ao usar var_dump no retorno do get_field, o valor vem como a string ‘20240101’ e não como uma data formatada.
Como prevenir
- Defina o Return Format do Date Field já na criação do campo, alinhado ao formato que o template vai exibir, para evitar reformatação manual depois.
- Padronize o uso de Ymd como Return Format quando o template precisar de formatos variados, e reconstrua a data com DateTime::createFromFormat a partir de Ymd.
- Nunca reformate a data partindo de um formato adivinhado: o valor no banco é sempre Ymd, então use esse formato como origem em qualquer conversão.
- Use date_i18n ou wp_date em vez de date() sempre que o nome do mês ou do dia da semana precisar aparecer no idioma do site.
Causa
- O Return Format do Date Field está configurado como Ymd, então o get_field devolve a string crua salva no banco (20240101) sem nenhum separador, e a data sai como número no template.
- O template reformata a data com date() ou DateTime usando o formato de entrada errado, ignorando que o ACF sempre salva no banco em Ymd, o que troca dia por mês ao interpretar a string.
- O Display Format e o Return Format foram confundidos: o desenvolvedor ajustou só o Display Format (que afeta o painel) esperando mudar a saída do template, que depende exclusivamente do Return Format.
- O the_field é usado direto no template e imprime o valor no Return Format atual sem reformatação, então qualquer formato diferente do desejado aparece exatamente como está configurado.
- A formatação usa funções de data do PHP que retornam o mês em inglês porque o locale do WordPress não foi aplicado, em vez de usar date_i18n ou wp_date para respeitar o idioma do site.
Como resolver
- Confira o Return Format do Date Field no grupo de campos: Em ACF, abra o grupo de campos, edite o Date Field e localize a configuração Return Format. É ela, e não o Display Format, que define como a data volta no get_field e no the_field. Ajuste para o formato que o template precisa exibir, por exemplo d/m/Y para o padrão brasileiro.
Painel WP -> ACF -> Grupos de Campos -> abra o grupo do campo de data Edite o campo do tipo Date Picker Em Return Format, escolha o formato desejado (ex.: d/m/Y) e salve o grupo - Entenda que a data é sempre salva como Ymd no banco: A documentação oficial do ACF deixa claro que o valor do Date Field é sempre gravado no banco no formato Ymd (20240101), independente do Display Format e do Return Format. Qualquer reformatação manual no PHP precisa partir desse formato de origem, nunca de um formato adivinhado.
Formato de armazenamento no banco: Ymd (ex.: 20240101 para 01/01/2024) Use sempre Ymd como formato de entrada ao reconstruir a data no PHP - Reformate a data no template a partir do formato Ymd: Quando precisar de um formato específico que o Return Format não cobre, defina o Return Format como Ymd para ter a string crua e reconstrua a data com DateTime::createFromFormat usando Ymd como formato de origem. Assim o dia e o mês nunca são trocados.
Defina o Return Format do campo como Ymd No template, recupere com $valor = get_field('data') $data = DateTime::createFromFormat('Ymd', $valor) echo $data->format('d/m/Y') - Garanta o mês em português com date_i18n ou wp_date: Se a data precisa do nome do mês ou do dia da semana em português, não use a função date() crua do PHP, que ignora o idioma do WordPress. Use date_i18n ou wp_date passando o timestamp da data para respeitar o locale configurado no site.
$data = DateTime::createFromFormat('Ymd', get_field('data')) echo date_i18n('d de F de Y', $data->getTimestamp()) - Confirme o Display Format só para a experiência no painel: Depois de acertar a saída do template, ajuste o Display Format apenas para deixar o calendário do painel legível para quem edita. Ele não afeta o frontend, então serve só para a usabilidade interna ao selecionar a data.
Painel WP -> ACF -> Grupos de Campos -> edite o Date Field Defina o Display Format (ex.: d/m/Y) e salve Abra um post para conferir o calendário no painel
<?php
// Return Format do campo definido como Ymd para ter a string crua.
$valor = get_field( 'data_do_evento' );
if ( $valor ) {
// O ACF salva sempre em Ymd (ex.: 20240101); use Ymd como origem.
$data = DateTime::createFromFormat( 'Ymd', $valor );
if ( $data ) {
// Formato numérico simples, sem troca de dia/mes.
echo esc_html( $data->format( 'd/m/Y' ) );
// Mes por extenso no idioma do site (pt_BR).
echo esc_html( date_i18n( 'd de F de Y', $data->getTimestamp() ) );
}
}














