---
title: Calcular datas
description: Compare datas, descubra a diferença entre elas, some ou subtraia dias, meses e anos e desvie o fluxo conforme o resultado, tudo em um único nó.
---

# Calcular datas  ·  `date_calc`

<NoCard kind="date_calc" categoria="Dados" />

<Secao icon="info">Para que serve</Secao>

Imagina que o cliente informou a data de nascimento e você precisa saber se ela já passou, há quantos anos aconteceu ou se cai antes de daqui a 30 dias. O Calcular datas lê uma data, compara com outra (ou com hoje) e devolve a diferença em dias, meses e anos, além de respostas prontas como "é antes?", "é no futuro?".

Um mesmo nó pode fazer **vários cálculos** e, se você quiser, **desviar o fluxo** conforme o resultado deles, sem precisar de um nó Se/Senão logo depois.

<Secao icon="clock">Quando usar</Secao>

- Verificar se uma data informada pelo cliente está no futuro ou no passado
- Descobrir quantos dias, meses ou anos se passaram desde um evento
- Calcular uma data de referência, como "hoje menos 5 anos" ou "hoje mais 30 dias"
- Validar se uma data digitada existe de verdade (ex.: 31/02 é recusado)
- Fazer vários cálculos de datas ao mesmo tempo e seguir por um caminho diferente conforme o resultado

---

<Secao icon="list-checks">Passo a passo</Secao>

<Passos>
  <Passo>Certifique-se de ter as datas disponíveis no fluxo, vindas de perguntas ao cliente, de uma API ou de variáveis.</Passo>
  <Passo>Arraste o nó **Calcular datas** para o canvas e conecte-o à fonte das datas.</Passo>
  <Passo>Clique no nó e, na seção **Cálculos**, clique em **Adicionar cálculo** para cada conta que você precisa. Dê um **Rótulo** a ele e preencha **Data**, **Comparar com** e **Deslocamento** (veja abaixo).</Passo>
  <Passo>Confira a frase de resumo de cada cálculo, por exemplo "Data comparada com hoje − 5 anos".</Passo>
  <Passo>Se quiser que o fluxo siga caminhos diferentes, abra a seção **Condições** e crie um caso para cada situação. Se só precisa dos valores, deixe a seção sem casos.</Passo>
  <Passo>Salve. As saídas de cada cálculo ficam disponíveis como <code v-pre>{{datas.prazo_parto.days}}</code>, <code v-pre>{{datas.prazo_parto.is_future}}</code> e assim por diante, com o nome do seu nó no lugar de <code v-pre>datas</code> e o id do cálculo no lugar de <code v-pre>prazo_parto</code>.</Passo>
</Passos>

<Dica>

Nós **Calcular datas** criados antes desta versão continuam funcionando normalmente, sem nenhum ajuste.

</Dica>

---

## Configurando o nó

O painel do nó tem três seções: **Cálculos**, **Condições** e **Saídas**.

### Cálculos

Os cálculos aparecem em uma lista no formato sanfona: clique em um para abrir e editar, e use **Adicionar cálculo** para incluir outro. Cada cálculo tem os campos abaixo.

#### Rótulo e Id

| Campo | O que preencher |
|-------|----------------|
| **Rótulo** | O nome do cálculo para você, como "Prazo do parto" |
| **Id** | Gerado a partir do rótulo. Usa só letras minúsculas, números e `_` (por exemplo, `prazo_parto`). É ele que aparece na referência da saída |

Cada cálculo precisa de um id diferente dentro do mesmo nó. Estes nomes são reservados e não podem ser usados como id: `valid`, `iso`, `formatted`, `reference_iso`, `days`, `months`, `years`, `is_before`, `is_after`, `is_same` e `is_future`. Também não dá para usar os nomes de escopo de variável: `local`, `flow`, `conversation`, `agent`, `custom_fields`, `date`, `event`, `contact`, `workspace`, `sys`, `env` e `system`.

#### Data

| Campo | O que preencher |
|-------|----------------|
| **Data** | A data a ser lida. Digite uma data fixa ou use o botão de variáveis para inserir uma, como <code v-pre>{{pergunta_nascimento.resposta}}</code> |
| **Formato da data** | Detectar automaticamente, DD/MM/AAAA, AAAA-MM-DD ou MM/DD/AAAA (veja a tabela abaixo) |

##### Formatos aceitos em Detectar automaticamente

| Exemplo digitado | Entendido como |
|------------------|----------------|
| 10/03/2025 | 10 de março de 2025 |
| 10-03-2025 | 10 de março de 2025 |
| 10.03.25 | 10 de março de 2025 |
| 2025-03-10 | 10 de março de 2025 |

Se a data estiver em outro formato, escolha o formato específico em **Formato da data** para não depender da detecção automática.

#### Comparar com

A data usada na comparação. Também aceita variáveis. **Se ficar vazio, a comparação é com hoje**, no fuso horário do workspace.

#### Deslocamento

| Campo | O que preencher |
|-------|----------------|
| **Quantidade** | Quanto somar à data de **Comparar com**. Use número negativo para subtrair, como `-5` |
| **Unidade** | Dias, meses ou anos |

Logo abaixo, o painel mostra uma frase de resumo que se atualiza enquanto você digita:

| Configuração | Frase |
|--------------|-------|
| Comparar com vazio, Quantidade 0 | Data comparada com hoje |
| Comparar com vazio, Quantidade -5, anos | Data comparada com hoje − 5 anos |
| Comparar com <code v-pre>{{pergunta_parto.resposta}}</code>, Quantidade -280, dias | Data comparada com <code v-pre>{{pergunta_parto.resposta}}</code> − 280 dias |

### Condições

Por padrão, o nó tem uma saída só e apenas devolve os valores dos cálculos. A seção **Condições** deixa o próprio nó escolher o caminho, no mesmo estilo do Se/Senão.

- Clique em **Adicionar caso** para criar o primeiro (**IF**) e em **+ ELIF** para os seguintes. Cada caso tem condições sobre as saídas dos seus cálculos, escolhidas numa lista fechada. Nas saídas de sim/não (`valid`, `is_before`...) o valor é `true` ou `false`. Combine-as com **E** (todas precisam ser verdadeiras) ou **OU** (basta uma).
- Cada caso vira uma **saída no card** do nó, e você liga cada saída ao caminho que quiser.
- Existe também a saída **Senão** (ELSE no card), usada quando nenhum caso bate.
- **O primeiro caso que bate decide.** Os seguintes são ignorados.
- Sem nenhum caso, o nó tem uma saída só.

Exemplos de condições:

| Condição | Leitura |
|----------|---------|
| "Prazo do parto › é antes" igual a `true` | A data do cálculo "Prazo do parto" é anterior à data de comparação |
| "Saída do emprego › dias" maior que 30 | A diferença do cálculo "Saída do emprego" passa de 30 dias |

<Cuidado>

A **ordem dos casos importa**. Como o primeiro que bate decide, coloque os casos mais específicos primeiro e os mais genéricos por último.

</Cuidado>

---

## Saídas

Cada cálculo vira uma saída do nó, com os campos abaixo. Todos eles são lidos pelo id do cálculo.

| Saída | O que traz |
|-------|-----------|
| `valid` | `true` se a data é válida, `false` se não existe (ex.: 31/02) |
| `iso` | A data informada, no formato AAAA-MM-DD |
| `formatted` | A data informada, formatada para exibição |
| `reference_iso` | A data de comparação usada (a de **Comparar com**, ou hoje, já somada ao deslocamento) |
| `days` | Diferença em dias entre as duas datas |
| `months` | Diferença em meses entre as duas datas |
| `years` | Diferença em anos entre as duas datas |
| `is_before` | `true` se a data informada é anterior à de comparação |
| `is_after` | `true` se a data informada é posterior à de comparação |
| `is_same` | `true` se as duas datas são iguais |
| `is_future` | `true` se a data informada está no futuro, sempre comparada com hoje |

<Cuidado>

`days`, `months` e `years` são sempre positivos: é a diferença absoluta entre as datas. Para saber a direção, use `is_before`, `is_after` ou `is_future`.

</Cuidado>

Para usar uma saída em outro nó, referencie-a pelo nome do nó e pelo id do cálculo: <code v-pre>{{nome_do_no.id_do_calculo.is_before}}</code>. Por exemplo, em um nó chamado "Datas" com o cálculo `prazo_parto`, a referência é <code v-pre>{{datas.prazo_parto.is_before}}</code>. Se você renomear o nó para "Idade do cliente" e o cálculo se chamar `idade`, a referência vira <code v-pre>{{idade_do_cliente.idade.years}}</code>.

---

## Comportamento

- **Data inválida não para o fluxo.** Se a data não existir (ex.: 31/02), a saída `valid` vem como `false` e o fluxo segue. Trate esse caso com um caso na seção **Condições** (`valid` igual a `false`) ou com um nó **Se/Senão (condição)** logo depois.
- **Ano com 2 dígitos:** `25` vira 2025 e `98` vira 1998.
- **Soma de meses e anos:** somar 1 mês a 31/01 resulta no último dia de fevereiro (28 ou 29, conforme o ano).

---

<Secao icon="circle-check">Exemplos</Secao>

**a) A data informada está no futuro?**

1. **Calcular datas**: um cálculo com Data = resposta do cliente. Comparar com = vazio (hoje). Sem casos na seção **Condições**.
2. **Se/Senão (condição)**: `is_future` igual a `true`.

Se preferir, dispense o Se/Senão: crie o caso IF "É no futuro" igual a `true` no próprio nó e ligue a saída dele ao caminho desejado.

**b) O evento aconteceu há mais de 5 anos?**

Um nó só, sem Se/Senão depois:

1. **Cálculos**: um cálculo com id `prazo`. Data = data do evento. Comparar com = vazio (hoje). Deslocamento = `-5` anos. A frase do painel fica "Data comparada com hoje − 5 anos".
2. **Condições**: caso IF "Prazo › é antes" igual a `true`, ligado ao caminho "prazo vencido". A saída **Senão** segue o fluxo normal.

A data de comparação passa a ser "hoje menos 5 anos". Se a data do evento for anterior a ela, então o evento aconteceu há mais de 5 anos e o fluxo vai para "prazo vencido".

**c) Dois cálculos no mesmo nó**

Imagine um fluxo que pergunta a data do parto e a data de saída do emprego do cliente. Em um único nó **Calcular datas**:

1. **Cálculo 1**, rótulo "Prazo do parto" (id `prazo_parto`): Data = data do parto. Comparar com = vazio (hoje). Deslocamento = `-5` anos. A frase fica "Data comparada com hoje − 5 anos".
2. **Cálculo 2**, rótulo "Saída do emprego" (id `saida_emprego`): Data = data de saída do emprego. Comparar com = data do parto. Deslocamento = `-280` dias. A frase fica "Data comparada com a data do parto − 280 dias".
3. **IF**: "Prazo do parto › é antes" igual a `true`, ligado ao caminho "prazo vencido".
4. **ELIF**: "Saída do emprego › dias" maior que 30, ligado ao caminho "revisar com atendente".
5. **Senão**: segue o fluxo normal.

As saídas ficam disponíveis como <code v-pre>{{datas.prazo_parto.is_before}}</code> e <code v-pre>{{datas.saida_emprego.days}}</code> para qualquer nó seguinte.

<Dica>

Antes de usar `days`, `months` ou `years` numa condição, confirme que `valid` é `true`. Coloque um caso com `valid` igual a `false` no topo da lista de casos para tratar a data inválida primeiro.

</Dica>

---

## Saiba mais

- [Se / Senão (condição)](/guia/flow-builder/logica/if-else) — decida o caminho do fluxo com base em outras informações
- [Tabela de decisão](/guia/flow-builder/dados/tabela-decisao) — classifique o cliente combinando várias respostas
- [Atribuir Variável](/guia/flow-builder/dados/variaveis) — guarde o resultado para usar mais adiante
