# Funções de data

As funções de data são usadas para processar, gerar e converter datas. Elas estão disponíveis para conectores que suportam expressões Double Braces. Para saber como fornecer informações aos conectores usando esse recurso, consulte [Funções Double Braces](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions).

## FORMATDATE

Usando Double Braces, você pode combinar esta função com o acesso ao elemento JSON de entrada de um conector.

`FORMATDATE` formata valores de data e hora, com suporte opcional para locale e timezone.

### Sintaxe

{% code overflow="wrap" %}

```
FORMATDATE(value, "formato-origem", "formato-destino", "locale-origem"?, "timezone-origem"?, "locale-destino"?, "timezone-destino"?)
```

{% endcode %}

{% hint style="info" %}
Parâmetros marcados com `?` são opcionais e podem ser definidos como `null`.&#x20;
{% endhint %}

**Definição do formato de data:** `dd/MM/yyyy`. Você também pode usar a palavra-chave `timestamp` no lugar de uma string de formato. O valor sempre será convertido usando ISO Zoned Date/Time.

### Padrões de formato de data e hora

Consulte a [documentação Java DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) para mais detalhes sobre padrões de formato de data e hora.

**Padrões comuns:**

| Padrão   | Descrição              |
| -------- | ---------------------- |
| `y`      | Ano (ano da era)       |
| `u`      | Ano                    |
| `M`      | Mês do ano             |
| `d`      | Dia do mês             |
| `E`      | Dia da semana (texto)  |
| `e`, `c` | Dia da semana (número) |
| `D`      | Dia do ano (1–365)     |
| `H`      | Hora (0–23)            |
| `h`      | Hora (1–12)            |
| `a`      | Marcador AM/PM         |
| `m`      | Minutos                |
| `s`      | Segundos               |

### Exemplo de entrada

```json
{
  "date": "10/10/2010 11:59:59",
  "date_no_time": "30/10/2010",
  "time_no_date": "11:12:13",
  "timestamp_date": 1564670039000,
  "date_time_utc": "2012-10-01T09:45:00.0000000+00:00"
}
```

### Exemplos de conversão

{% code overflow="wrap" %}

```json
{
  "timezone_conversion": {{ FORMATDATE(message.date, "dd/MM/uuuu HH:mm:ss", "dd/MM/uuuu HH:mm:ss z", null, "GMT-3", null, "UTC") }},

  "simple_date": {{ FORMATDATE(message.date_no_time, "dd/MM/uuuu", "MM/dd/uuuu") }},

  "simple_time": {{ FORMATDATE(message.time_no_date, "HH:mm:ss", "ss:mm:HH") }},

  "date_from_timestamp": {{ FORMATDATE(message.timestamp_date, "timestamp", "dd/MM/uuuu HH:mm:ss") }},

  "simple_date_to_timestamp": {{ FORMATDATE(message.simple_date, "dd/MM/uuuu", "timestamp") }},

  "iso_date_time": {{ FORMATDATE(message.timestamp_date, "timestamp", null) }},

  "date_month_name_pt_br": {{ FORMATDATE(NOW(), "timestamp", "dd/MMMM/uuuu", null, null, "pt-BR", null) }},

  "date_time_utc": {{ FORMATDATE(message.date_time_utc, "uuuu-MM-dd'T'HH:mm:ss.SSSSSSSXXX", "dd/MM/uuuu HH:mm:ss") }}
}
```

{% endcode %}

## NOW

Usando Double Braces, você pode combinar esta função com o acesso ao elemento JSON de entrada de um conector.

`NOW` retorna a data e hora atuais como um timestamp em milissegundos.

### Sintaxe

```
NOW()
```

### Exemplos de uso

```json
{
  "now": {{ NOW() }},

  "currentDate": {{ FORMATDATE(NOW(), "timestamp", "uuuuMMdd", null, "GMT-3") }},

  "currentTime": {{ FORMATDATE(NOW(), "timestamp", "HHmmss", null, "GMT-3") }},

  "tomorrow": {{ FORMATDATE(TOLONG(SUM(NOW(), 86400000)), "timestamp", "uuuuMMdd") }},

  "time5minBefore": {{ TOLONG(SUBTRACT(NOW(), TOLONG("300000"))) }}
}
```

## SUMDATE

Usando Double Braces, você pode combinar esta função com o acesso ao elemento JSON de entrada de um conector.

`SUMDATE` adiciona ou subtrai uma determinada quantidade de tempo de uma data, com base em uma unidade de tempo especificada.

### Sintaxe

```
SUMDATE(milliseconds:number, unit:string, value:string)
```

**Parâmetros:**

* `milliseconds` — a data de entrada como um timestamp Unix.
* `unit` — a unidade de tempo a ser aplicada. Valores aceitos: `hour`, `minute`, `second`, `day`, `month` e `year`.
* `value` — a quantidade de tempo a ser adicionada (use um número negativo para subtrair).
* `zoneId` — *(opcional)* o fuso horário da data de entrada. O padrão é `UTC`.

<details>

<summary><strong>Fusos horários aceitos</strong></summary>

* Australia/Darwin
* Australia/Sydney
* America/Argentina/Buenos\_Aires
* Africa/Cairo
* America/Anchorage
* America/Sao\_Paulo
* Asia/Dhaka
* Africa/Harare
* America/St\_Johns
* America/Chicago
* Asia/Shanghai
* Africa/Addis\_Ababa
* Europe/Paris
* America/Indiana/Indianapolis
* Asia/Kolkata
* Asia/Tokyo
* Pacific/Apia
* Asia/Yerevan
* Pacific/Auckland
* Asia/Karachi
* America/Phoenix
* America/Puerto\_Rico
* America/Los\_Angeles
* Pacific/Guadalcanal
* Asia/Ho\_Chi\_Minh

</details>

### Exemplo

Para adicionar 10 segundos a um timestamp:

```json
{
  "test": {{ SUMDATE(1599368565518, "SECOND", 10) }}
}
```

**Resultado esperado:**

```json
{ 1599368565528 }
```

## TOISODATE

Usando Double Braces, você pode combinar esta função com o acesso ao elemento JSON de entrada de um conector.

`TOISODATE` converte um valor de data e hora para o formato ISO Date, com suporte opcional a locale e timezone.

### Sintaxe

```
TOISODATE(value, "formatoOrigem", "formatoDestino", "locale"?, "timezone"?)
```

{% hint style="info" %}
Parâmetros marcados com `?` são opcionais e podem ser definidos como `null`.&#x20;
{% endhint %}

**Definição do formato de data:** `dd/MMMM/yyyy HH:mm:ss`. Você também pode usar a palavra-chave `timestamp` no lugar de uma string de formato. Se nenhum timezone for especificado, o UTC será usado por padrão.

### Exemplo de entrada

```json
{
  "date": "10/10/2010 11:59:59",
  "date_with_tz": "10/10/2010 11:59:59 GMT-03:00",
  "localized_date_with_tz": "10/Outubro/2010 11:59:59 GMT-03:00",
  "timestamp_date": "1564670039000",
  "date_no_time": "30/09/2018"
}
```

### Exemplos de conversão

{% code overflow="wrap" %}

```json
{
  "forced_utc_no_locale": {{ TOISODATE(message.date, "dd/MM/uuuu HH:mm:ss", null, "UTC") }},

  "inferred_tz_no_locale": {{ TOISODATE(message.date_with_tz, "dd/MM/uuuu HH:mm:ss z") }},

  "localized_date_with_tz": {{ TOISODATE(message.localized_date_with_tz, "dd/MMMM/uuuu HH:mm:ss z", "pt-BR") }},

  "date_generated_from_timestamp": {{ TOISODATE(message.timestamp_date, "timestamp") }},

  "iso_datetime_from_date_only": {{ TOISODATE(message.date_no_time, "dd/MM/uuuu", null, "GMT-3") }}
}
```

{% endcode %}

## DIFFDATE

`DIFFDATE` calcula a diferença entre duas datas.

### Sintaxe

```
DIFFDATE(timestamp1, timestamp2, "timeUnit")
```

**Parâmetros:**

* `timestamp1`, `timestamp2` — ambas as datas devem ser fornecidas no formato timestamp.
* `timeUnit` — valores aceitos: `year`, `month`, `day`, `hour`, `minute`, `second` e `millisecond`.

{% hint style="info" %}
O cálculo é realizado como: `timestamp2 - timestamp1`.&#x20;
{% endhint %}

**Observações:**

* Se a diferença entre as duas datas for menor que 1 unidade, o resultado será `0`.
* Se `timestamp1` for maior que `timestamp2`, a função retorna um valor negativo.

### Exemplo de entrada

```json
{
  "timestamp1": "1550458800000",
  "timestamp2": "1613617200000"
}
```

### Exemplos de aplicação

```json
{
  "years": {{ DIFFDATE(message.timestamp1, message.timestamp2, "year") }},

  "months": {{ DIFFDATE(message.timestamp1, message.timestamp2, "month") }},

  "hours": {{ DIFFDATE(message.timestamp1, message.timestamp2, "hour") }}
}
```
