Como Usar a Fórmula parseDate() do Notion com Formatos de Data Não Padrão
🔍 WiseChecker

Como Usar a Fórmula parseDate() do Notion com Formatos de Data Não Padrão

As fórmulas do Notion podem extrair datas de strings de texto, mas a função parseDate() integrada aceita apenas um conjunto limitado de formatos de data padrão. Se seus dados de origem contiverem datas em formatos como “2023/12/25” ou “25-Dec-2023” ou “December 25, 2023”, o parseDate() retornará um erro. Este artigo explica exatamente quais formatos o parseDate() aceita, por que strings não padrão falham e como reformatar essas strings em uma estrutura analisável usando outras funções de fórmula do Notion. Você aprenderá um método repetível para converter quase qualquer string de data em um objeto de data válido do Notion.

Principais Conclusões: Regras de Formato do parseDate() e Soluções Alternativas

  • Formato ISO 8601 (YYYY-MM-DD): O único formato que o parseDate() aceita diretamente sem modificação.
  • replaceAll() e slice(): Use essas funções de string para converter barras, espaços ou nomes de meses não padrão em ISO 8601.
  • dateSubtract() e dateAdd(): Use-os para ajustar deslocamentos após a análise inicial se a string reformatada ainda falhar.

ADVERTISEMENT

Como o parseDate() Interpreta Strings e Por Que Formatos Não Padrão Falham

A função parseDate() nas fórmulas do Notion espera uma string que corresponda exatamente ao formato de data ISO 8601: YYYY-MM-DD. Este é o único formato que o Notion reconhece automaticamente. Se a string contiver barras, espaços, vírgulas ou nomes de meses abreviados, o parseDate() retorna um resultado vazio ou um erro.

O Notion não fornece uma função de análise de data com especificadores de formato como strptime em linguagens de programação. Em vez disso, você deve manipular a string original usando as funções de string do Notion — replaceAll(), slice(), concat() e formatDate() — para produzir uma string que o parseDate() possa processar.

A causa raiz da falha é que o parseDate() não realiza nenhum palpite inteligente. Não é um analisador de linguagem natural. Ele verifica apenas o padrão YYYY-MM-DD ou YYYY-MM-DDTHH:mm:ss.sssZ (ISO 8601 completo com hora). Qualquer desvio, incluindo a falta de um zero à esquerda em um mês ou dia, faz com que a função falhe silenciosamente.

Exemplos de Entrada Aceitos

Estas strings funcionam com parseDate():

  • "2023-12-25"
  • "2023-12-25T14:30:00.000Z"
  • "2023-12-25T14:30:00"

Exemplos de Entrada Rejeitados

Estas strings falham com parseDate():

  • "2023/12/25" — barras em vez de hífens
  • "25-12-2023" — ordem dia-mês-ano
  • "Dec 25, 2023" — abreviatura do mês e vírgula
  • "December 25, 2023" — nome completo do mês
  • "2023-12-25 14:30" — espaço em vez de T

Passos para Converter uma String de Data Não Padrão em um Formato Compatível com parseDate()

A estratégia geral é usar replaceAll() para substituir caracteres e slice() para reordenar as partes da data. Abaixo estão três formatos não padrão comuns e a fórmula que converte cada um para ISO 8601.

Formato 1: Datas Separadas por Barras (MM/DD/AAAA ou DD/MM/AAAA)

  1. Identifique o delimitador e a ordem
    Suponha que a string de origem seja "12/25/2023" (mês/dia/ano). Se seus dados usarem dia/mês/ano, ajuste as posições do slice de acordo.
  2. Substitua as barras por hífens
    Use replaceAll() para trocar "/" por "-". A fórmula replaceAll("12/25/2023", "/", "-") produz "12-25-2023".
  3. Reordene as partes
    Como o parseDate() exige ano-mês-dia, use slice() para extrair segmentos e concatená-los. A fórmula completa para MM/DD/AAAA é:
    slice("12/25/2023", 6, 10) + "-" + slice("12/25/2023", 0, 2) + "-" + slice("12/25/2023", 3, 5)
    Isso retorna "2023-12-25".
  4. Passe o resultado para parseDate()
    Fórmula final: parseDate(slice("12/25/2023", 6, 10) + "-" + slice("12/25/2023", 0, 2) + "-" + slice("12/25/2023", 3, 5))

Formato 2: Data com Nome do Mês Abreviado (ex.: “Dec 25, 2023”)

  1. Substitua a abreviatura do mês pelo seu equivalente numérico
    Use chamadas replaceAll() aninhadas para mapear cada abreviatura de mês para um número de dois dígitos. Exemplo para dezembro: replaceAll("Dec 25, 2023", "Dec", "12") resulta em "12 25, 2023".
  2. Remova a vírgula e o espaço
    Encadeie outro replaceAll() para remover a vírgula: replaceAll("12 25, 2023", ",", "") produz "12 25 2023".
  3. Substitua espaços por hífens
    replaceAll("12 25 2023", " ", "-") resulta em "12-25-2023".
  4. Reordene para AAAA-MM-DD
    Use slice como no Formato 1. A fórmula final combinada para "Dec 25, 2023" é:
    parseDate(slice(replaceAll(replaceAll(replaceAll("Dec 25, 2023", "Dec", "12"), ",", ""), " ", "-"), 6, 10) + "-" + slice(replaceAll(replaceAll(replaceAll("Dec 25, 2023", "Dec", "12"), ",", ""), " ", "-"), 0, 2) + "-" + slice(replaceAll(replaceAll(replaceAll("Dec 25, 2023", "Dec", "12"), ",", ""), " ", "-"), 3, 5))

Formato 3: Data com Nome Completo do Mês (ex.: “December 25, 2023”)

  1. Substitua o nome completo do mês pelo seu valor numérico
    Use replaceAll() para cada mês. Exemplo: replaceAll("December 25, 2023", "December", "12") resulta em "12 25, 2023".
  2. Remova a vírgula e reordene
    Aplique os mesmos passos do Formato 2 a partir do passo 2. A fórmula completa é análoga ao exemplo do mês abreviado, mas com a string do mês completo.

ADVERTISEMENT

Se a Reformatação Ainda Falhar

parseDate() Retorna Vazio Após a Reformatação

Se a string final ainda contiver espaços à esquerda ou à direita, o parseDate() a rejeitará. Envolva toda a string reformatada em trim() antes de passá-la para parseDate(). Exemplo: parseDate(trim(sua_string_reformatada)).

Partes da Data Não Estão com Zero à Esquerda

Se o mês ou dia for um único dígito (ex.: "2023-1-5"), o parseDate() pode falhar. Use if() e length() para adicionar um zero à esquerda. Para um valor de mês armazenado em uma propriedade Mês, a fórmula if(length(prop("Mês")) == 1, "0" + prop("Mês"), prop("Mês")) garante dois dígitos.

Componente de Hora Presente em Formato Não ISO

Se a string incluir uma hora após um espaço (ex.: "2023-12-25 14:30"), substitua o espaço por T usando replaceAll() e acrescente :00 para os segundos: replaceAll("2023-12-25 14:30", " ", "T") + ":00".

Comparação de Abordagens de Análise de Data em Fórmulas do Notion

Item parseDate() com String ISO Reformatação Manual de String
Requisito de entrada ISO 8601 exato (AAAA-MM-DD) Qualquer string que possa ser manipulada
Complexidade Chamada de função única Múltiplas funções de string aninhadas
Tratamento de erros Retorna vazio em caso de incompatibilidade Requer trim() e verificações de zero à esquerda
Manutenção Baixa — nenhuma alteração de fórmula necessária Alta — cada formato de origem precisa de uma cadeia personalizada
Melhor caso de uso Dados já em formato ISO Dados importados de sistemas externos

Agora você pode converter strings de data não padrão em um formato que o parseDate() aceita usando replaceAll(), slice() e trim(). Para simplificar a manutenção, considere armazenar a string reformatada em uma propriedade de fórmula separada e referenciar essa propriedade em sua fórmula principal. Para datas que ainda falharem após a reformatação, use dateSubtract() e dateAdd() para corrigir qualquer deslocamento resultante de um fuso horário mal interpretado.

ADVERTISEMENT