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.
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)
- 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. - Substitua as barras por hífens
UsereplaceAll()para trocar"/"por"-". A fórmulareplaceAll("12/25/2023", "/", "-")produz"12-25-2023". - Reordene as partes
Como oparseDate()exige ano-mês-dia, useslice()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". - 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”)
- Substitua a abreviatura do mês pelo seu equivalente numérico
Use chamadasreplaceAll()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". - Remova a vírgula e o espaço
Encadeie outroreplaceAll()para remover a vírgula:replaceAll("12 25, 2023", ",", "")produz"12 25 2023". - Substitua espaços por hífens
replaceAll("12 25 2023", " ", "-")resulta em"12-25-2023". - 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”)
- Substitua o nome completo do mês pelo seu valor numérico
UsereplaceAll()para cada mês. Exemplo:replaceAll("December 25, 2023", "December", "12")resulta em"12 25, 2023". - 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.
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.