🎉 USE O CUPOM FIM.DE.SEMANA.FULL | 20% OFF acima de R$ 100,00

Como corrigir o Date Picker que não formata a data no ACF PRO

Time Full Services Time Full Services
Tipo Page Builders
Nome do erro Date Picker do ACF PRO nao formata a data corretamente EN: ACF PRO Date Picker not formatting date correctly
Severidade Informativo
Descrição O ACF Date Picker formato sai errado quando o template usa o valor cru salvo no banco, que o ACF PRO sempre grava como Ymd (AAAAMMDD), em vez de aplicar o Return Format ou converter a string com DateTime antes de exibir.

O que é Date Picker que não formata a data no ACF PRO?

O ACF Date Picker formato de data envolve três configurações distintas do campo Date Picker no ACF PRO: o Display Format, que controla como a data aparece no calendário ao selecionar, o Return Format, que define o formato da string devolvida ao carregar o valor com get_field, e o valor real gravado no banco. Segundo a documentação oficial do ACF, o valor e sempre salvo como Ymd (AAAAMMDD) no banco, independente do que o usuário ve no painel.

O problema de formatacao aparece quando o template ignora essa separacao. Se o código le o valor cru ou usa um Return Format diferente do esperado, a data sai como 20260617 em vez de 17/06/2026, ou simplesmente não bate com o formato configurado. A solução passa por alinhar o Return Format do campo e, quando precisa de um formato dinâmico no template, converter a string Ymd para um objeto DateTime antes de exibir.

Como identificar

  • A data aparece no template como um número cru no formato 20260617 em vez de uma data legivel como 17/06/2026.
  • O valor exibido não corresponde ao Display Format escolhido no campo, mostrando outro formato ao renderizar no frontend.
  • Ao alterar o Return Format no painel do ACF, as datas já salvas continuam saindo no formato antigo no template.
  • A função date() ou DateTime gera o aviso ‘Failed to parse time string’ porque recebe a string Ymd em vez de um timestamp valido.
  • No JavaScript do calendário a data selecionada não respeita o formato configurado quando o Display Format usa caracteres especiais como o @ do PHP.
Antes de começar: Antes de alterar o Return Format de campos já em uso ou editar o functions.php em producao, faça um backup do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging. Mudar o Return Format afeta como o valor e lido em todos os templates que usam o campo.

Como prevenir

  • Defina o Return Format do Date Picker no momento de criar o campo, já alinhado ao formato que o template vai exibir, para não depender de conversao no código.
  • Lembre que o ACF sempre grava o valor como Ymd no banco: ao atualizar uma data via update_field, passe sempre a string no formato Ymd.
  • Padronize a conversao de datas do ACF com DateTime::createFromFormat usando Ymd como mascara, evitando passar a string crua para date() que espera timestamp.
  • Documente nos campos Date Picker quais usam Display Format com caracteres especiais e mantenha o filtro php_to_js_date_formats versionado no tema ou plugin.

Causa

  • O template le o valor cru do Date Picker, que o ACF PRO sempre grava como Ymd (AAAAMMDD) no banco segundo a doc oficial, sem aplicar o Return Format nem converter a string antes de exibir.
  • O Return Format do campo esta configurado com um formato diferente do que o template espera (por exemplo Ymd no campo e d/m/Y no código), entao get_field devolve a string num formato e o template assume outro.
  • O código passa a string Ymd direto para a função date() do PHP, que espera um timestamp Unix e não uma data formatada, retornando uma data invalida ou aviso de parse.
  • O Display Format e o Return Format foram trocados de lugar: o Display Format so afeta o calendário no painel e não muda o valor devolvido por get_field, que segue o Return Format.
  • O Display Format usa o caractere especial @ do PHP sem o filtro acf/settings/php_to_js_date_formats, fazendo o calendário JavaScript interpretar o formato de modo diferente do PHP.

Como resolver

  1. Ajuste o Return Format do campo Date Picker: Em ACF -> Grupos de Campos, abra o campo Date Picker e defina o Return Format no formato que o template vai exibir, como d/m/Y. O Return Format e o que controla a string devolvida por get_field, e não o Display Format, que so afeta o calendário no painel.
    Painel WP -> ACF -> Grupos de Campos -> abra o grupo e edite o campo Date Picker
    Defina Return Format como d/m/Y (ou o formato desejado)
    Salve o grupo de campos
  2. Use get_field e confie no Return Format no template: No template, recupere o valor com get_field. A string já vem no Return Format configurado no passo anterior, entao basta exibi-la. Não leia o valor cru do banco nem reformate sem necessidade.
    Recupere o valor: $data = get_field( 'data_evento' )
    Exiba direto: echo esc_html( $data )
  3. Converta a string Ymd com DateTime para formato dinâmico: Quando você precisa de um formato diferente no template sem mexer no campo, ou definiu o Return Format como Ymd, converta a string para um objeto DateTime com createFromFormat usando Ymd como mascara de entrada e depois aplique o formato de saida desejado.
    $valor = get_field( 'data_evento' )
    $date = DateTime::createFromFormat( 'Ymd', $valor )
    echo $date->format( 'j M Y' )
  4. Exiba a data localizada em portugues com date_i18n: Para mostrar o mes em portugues, gere o timestamp a partir do objeto DateTime e passe para date_i18n, que aplica a tradução do WordPress. Assim a data sai como 17 de junho de 2026 em vez do mes em ingles.
    $date = DateTime::createFromFormat( 'Ymd', get_field( 'data_evento' ) )
    echo date_i18n( 'j \d\e F \d\e Y', $date->getTimestamp() )
  5. Trate caracteres especiais do formato com o filtro do ACF: Se o Display Format usa um caractere especial do PHP como o @ e o calendário JavaScript exibe diferente, registre o filtro acf/settings/php_to_js_date_formats para mapear o caractere PHP para o equivalente do datepicker jQuery UI, conforme a doc oficial do ACF.
    Edite o functions.php do tema ou um plugin próprio
    Adicione o filtro acf/settings/php_to_js_date_formats (ver bloco de código abaixo)
    Salve e recarregue a tela de edição do campo
PHP
<?php
// 1) Exibir a data do ACF Date Picker no template, convertendo o Ymd salvo.
$valor = get_field( 'data_evento' );
if ( $valor ) {
    // O ACF grava sempre como Ymd (AAAAMMDD); cria o objeto a partir disso.
    $date = DateTime::createFromFormat( 'Ymd', $valor );
    if ( $date ) {
        // Data localizada em portugues via date_i18n (ex.: 17 de junho de 2026).
        echo esc_html( date_i18n( 'j \d\e F \d\e Y', $date->getTimestamp() ) );
    }
}

// 2) Caractere especial @ no Display Format: mapeia o formato PHP para o jQuery UI.
add_filter( 'acf/settings/php_to_js_date_formats', function ( $formats ) {
    $formats['@'] = '@'; // mantem o caractere intacto no datepicker
    return $formats;
} );

Perguntas frequentes

Por que o ACF Date Picker retorna a data como 20260617
Porque o ACF PRO sempre grava o valor no banco como Ymd (AAAAMMDD), segundo a documentação oficial. Se o template le o valor cru ou o Return Format esta como Ymd, a data sai nesse formato. Ajuste o Return Format ou converta a string com DateTime antes de exibir.
Qual a diferenca entre Display Format e Return Format no Date Picker
O Display Format controla apenas como a data aparece no calendário ao selecionar no painel. O Return Format define o formato da string devolvida por get_field ao carregar o valor. Para o template, o que importa e o Return Format.
Como exibir a data do ACF Date Picker no formato dia mes ano
Defina o Return Format do campo como d/m/Y, ou converta a string Ymd no template com DateTime::createFromFormat e depois aplique o format desejado, como j M Y. Assim você controla o formato de saida sem mexer no valor salvo.
Por que a função date() gera erro com a data do ACF
A função date() do PHP espera um timestamp Unix, mas o ACF devolve uma string formatada. Passe a string para DateTime::createFromFormat com a mascara Ymd e use o getTimestamp do objeto antes de qualquer função que precise de timestamp.
Como mostrar o mes em portugues na data do ACF
Converta a string Ymd para um objeto DateTime, pegue o timestamp com getTimestamp e passe para date_i18n, que aplica a tradução do WordPress conforme o idioma do site. O nome do mes sai em portugues automaticamente.
Em que formato devo salvar a data ao usar update_field no Date Picker
Sempre no formato Ymd (AAAAMMDD). A documentação do ACF afirma que ao atualizar o valor manualmente você deve usar o formato Ymd, que e como o campo armazena a data no banco, independente do Display ou Return Format.
Por que o calendário mostra a data diferente do formato PHP configurado
Quando o Display Format usa caracteres especiais do PHP como o @, o datepicker jQuery UI pode interpretar de modo diferente. Use o filtro acf/settings/php_to_js_date_formats para mapear o caractere PHP para o equivalente do JavaScript, como indica a doc do ACF.
Mudar o Return Format afeta as datas já salvas no banco
Não muda o valor no banco, que continua em Ymd. O Return Format so altera como get_field devolve a string daqui pra frente. As datas existentes voltam a sair no novo formato assim que você salva a configuração e recarrega o template.

Seja PRO.

Tenha acesso a snippets de código premium — PHP, JavaScript, CSS e HTML prontos para usar em seus projetos.

Conhecer o plano Pro →

Uma nova era para o WordPress.

A FULL Services redefine o CMS com uma arquitetura modular que transforma o WordPress em um motor de crescimento digital. 

Painéis personalizados

Um novo nível de controle para o WordPress. Acompanhe métricas, automações e evolução do seu site em um único painel visual.

A força por trás de grandes marcas

Para agências, estúdios e profissionais independentes que desejam oferecer soluções de alto nível com sua própria marca.

Componentes

Hero Sections

30 componentes

Seções de CTA

14 componentes

Login

14 componentes

Blog

14 componentes

Cabeçalhos

24 componentes

Seções de FAQ

53 componentes

Cadastro

53 componentes

Blog individual

53 componentes

Rodapés

28 componentes

Seções de contato

27 componentes

Seções de preços

27 componentes

Faixas

27 componentes

Portfólio

16 componentes

Seções de equipe

12 componentes

Números

12 componentes

Logotipos

12 componentes