O MaviBot trabalha com os seguintes formatos de DATA e HORA:

para datas – "dd.mm.yyyy"

para horas – "HH:MM"

Variáveis

Para trabalhar com datas e horas, você pode usar as seguintes variáveis:

current_date - data atual no formato dd.mm.yyyy, baseada no fuso horário do projeto
next_day - data de amanhã no formato dd.mm.yyyy; útil para agendar mensagens
current_time - hora atual no formato hh:mm, baseada no fuso horário do projeto
weekday - dia da semana como número: Segunda = 1, Terça = 2, etc.

Acesso rápido às descrições das funções:

Como adicionar tempo ao tempo

Você pode comparar datas e horas usando operadores lógicos, assim como números.

addYear() | addMonth() | addDays() | addMinutes()

addYear(date, years_to_add) - calcula uma nova data adicionando um número específico de anos à data fornecida, levando em conta anos bissextos. Use um número negativo para subtrair anos.

addMonth(date, months_to_add) - calcula uma nova data adicionando um número específico de meses à data fornecida, levando em conta anos bissextos. Use um número negativo para subtrair meses.

addDays(date, days_to_add) - adiciona um número específico de dias à data. Use um número negativo para subtrair dias. Exemplo: addDays(current_date, 20) ou addDays('20.08.2019', -99)

addMinutes(time, minutes_to_add) - adiciona um número específico de minutos à hora. Use um número negativo para subtrair minutos. Exemplo: addMinutes(current_time, 20) ou addMinutes('20:08', -30)

'date' + days - adiciona um número específico de dias à data

'time' + minutes - adiciona um número específico de minutos à hora

Exemplo de adição de um certo número de anos a uma data:

Exemplo de adição de um certo número de meses a uma data:

Exemplo de uso de uma operação matemática simples — adicionar dias a uma data e minutos a uma hora:

count = 2
date = '29.02.2020'
x = addYear(date, count)
y = addYear('31.12.2021', -1*count)

count = 10
date = '30.04.2019'
x = addMonth(date, count)
y = addMonth('31.12.2020', -1*count)

count = 10
date = '30.04.2019'
x = addMonth(date, count)
y = addMonth('31.12.2020', -1*count)

Como comparar tempo

Você pode comparar datas e horas usando operadores lógicos, assim como números:

maior que > , menor que <

igual a == , diferente de !=

maior ou igual a >= , menor ou igual a <=

As condições de comparação também podem ser combinadas usando os operadores lógicos AND e OR.

As condições de comparação devem ser logicamente consistentes, ou seja, você não pode criar condições como a == 1 e a != 1, pois um valor não pode ser igual e diferente de 1 ao mesmo tempo.

As condições de comparação são inseridas no campo "Variável".

Certifique-se de usar atrasos ao especificar condições de comparação em uma seta.

'01.09.2020'`` < '11.10.2020'

'11.10.2020' >= ``current_date

current_date == date

current_time >= '18:00'

current_time <= '21:00'

Como definir intervalos de tempo

Uma função muito útil para trabalhar com intervalos de tempo é:

time_interval('start_time', 'end_time')

A função retorna lógico True ou False.

Use esta função em blocos como uma condição no campo "Variável para comparar" ou dentro de uma calculadora usando IF().

A função permite verificar se a hora atual está dentro do intervalo especificado.

time_interval('10:00','19:00') - verifica o intervalo de tempo das 10h às 19h

time_interval('19:00','07:00') - verifica o intervalo de tempo das 19h às 7h

time_interval('18.10.2021 10:00','25.10.2021 23:59:59') - verifica o intervalo de tempo entre datas diferentes

time_interval('#{current_date} 10:00','#{date} 19:00') - verifica o intervalo de tempo definido usando variáveis

Vamos analisar mais de perto o primeiro exemplo. A função é lida da seguinte forma:

Se o usuário enviar uma mensagem contendo a palavra "hora" durante o período das 10:00 às 19:00, a condição retorna verdadeiro; caso contrário, retorna falso.

Isso permite criar respostas diferentes dependendo da hora da solicitação do cliente.

Por exemplo, se a hora atual estiver entre 10:00 e 19:00, o cliente receberá:
"Um gerente responderá em breve."

Em qualquer outro horário, eles receberão:
"O gerente está indisponível no momento; você receberá uma resposta durante o horário comercial a partir das 10:00."

No campo Calculadora, insira:

response = if(time_interval('10:00','19:00'), "Um gerente responderá em breve", "O gerente está indisponível no momento; você receberá uma resposta durante o horário comercial a partir das 10:00")

No campo "Mensagem", insira: #{response}

response = if(time_interval('10:00','19:00'), "Um gerente responderá em breve", "O gerente está indisponível no momento; você receberá uma resposta durante o horário comercial a partir das 10:00")

Como descobrir quanto tempo falta até o dia D

Para calcular quanto tempo falta até o dia D:

Defina a data e a hora do momento alvo que você deseja contar.

date_D = 10.10.2021 time_D = 12:00

Converta para o formato timestamp:

timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")

Capture a hora atual no formato timestamp:

timestamp0 = #{timestamp}

Arredonde os valores obtidos para números inteiros:

timeD = int(#{timestampD}) time0 = int(#{timestamp0})

Calcule a diferença em segundos:

time = timeD - time0

Divida pelo número de segundos em um dia e arredonde o resultado:

full_days = time/86400

days = int(#{full_days})

Calcule quantos segundos restam do dia parcial:

c = days*86400

d = time - c

Calcule a quantas horas isso corresponde e arredonde o valor:

e = d/3600 hours = int(e)

Calcule quantos segundos restam das horas parciais:

g = hours*3600

h = d - g

Converta isso em minutos e arredonde o valor:

i = h/60

minutes = int(i)

Calcule quantos segundos restam:

k = minutes*60

seconds = h - k

E exiba o tempo no campo "Texto da mensagem":

Tempo restante até o início: #{days} dias #{hours} horas #{minutes} minutos e #{seconds} segundos

Aqui está o código para inserir no campo "Calculadora":

timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")
timestamp0 = #{timestamp}
timeD = int(#{timestampD})
time0 = int(#{timestamp0})
time = timeD - time0
full_days = time/86400
days = int(#{days})
c = days*86400
d = time - c
e = d/3600
hours = int(e)
g = hours*3600 
h = d - g
i = h/60 
minutes = int(i)
k = minutes*60 
seconds = h - k

A Calculadora também suporta subtração de datas e horas sem conversão de tipo. Por exemplo:

'11.12.2021' - '8.12.2021' retorna 3 (dias)

'11:12' - '3:45' retorna 447 (minutos)

Como descobrir o próximo aniversário

Para que o bot envie saudações de aniversário, você pode usar a função:

birthdate(date) - retorna o próximo aniversário com base na data de nascimento da pessoa: reminder = birthdate('28.04.1994')

Como obter a data de um dia da semana específico

Se você tem envios recorrentes em dias da semana específicos, pode obter a data de um dia da semana para agendar o envio.

weekday_date(weekday, b) - retorna a data do dia da semana especificado mais próximo. Leva dois parâmetros:

O primeiro parâmetro é o número do dia da semana a ser encontrado (de 1 a 7, onde 1 = Segunda, 7 = Domingo).

O segundo parâmetro indica se deve retornar a data de hoje se o dia da semana especificado for hoje. Este parâmetro é opcional e o padrão é False.

Vamos ver um exemplo para entender como o segundo parâmetro funciona:

Você quer agendar o envio de uma mensagem para Quinta-feira.

Mas e se o cliente acabou de se registrar na Quinta-feira?

A mensagem deve ser enviada nesta Quinta-feira ou na próxima?

O segundo parâmetro definido como False significa que a mensagem será enviada apenas na próxima Quinta-feira (pulando hoje).

O segundo parâmetro definido como True significa que a mensagem será enviada nesta Quinta-feira, se hoje for Quinta-feira (incluindo o dia do registro).

No nosso exemplo, o usuário se registra na Quinta-feira, 13.02.2025, e queremos enviar a mensagem na próxima Quinta-feira.
Então, o valor retornado será "20.02.2025".

Por exemplo, weekday_date(4) retornará '20.02.2025'.

Se você quiser que o dia atual conte apenas até um certo horário, pode usar esta construção:

weekday_date(4, current_time < '13:00'), onde a condição pode ser substituída por qualquer condição que você precisar.

Aqui está um exemplo de como usar a função:

Exemplo de uso da função no campo "Data de envio" de uma conexão

Como obter a data de um dia específico do mês

Se você tem ações recorrentes em um dia específico do mês, pode obter a data para a ocorrência mais próxima desse dia para agendar seu envio.

month_date(date, b) - retorna a data mais próxima do mês para o número do dia especificado. Leva dois parâmetros:

date - número do dia do mês a ser encontrado (de 1 a 31)

b - parâmetro opcional; indica se deve retornar a data de hoje se ela corresponder ao dia especificado. O padrão é False.

Se você passar 31, mas o mês atual tiver apenas 30 dias, a função retornará o último dia do mês (por exemplo, o dia 30).

Por exemplo:

Se hoje é 05.04.2022 e você chama t = month_date(1), o resultado será 01.05.2022 - o dia 1º mais próximo do mês após hoje.

Como verificar se a hora atual está dentro do horário comercial

Por exemplo, a empresa funciona das 9h às 18h e está fechada aos sábados e domingos. Vamos construir as verificações passo a passo:

  1. Verifique se a hora está dentro do horário comercial: current_time >= '9:00' AND current_time <= '18:00'
  2. Verifique se a hora está fora do horário comercial: current_time < '9:00' OR current_time > '18:00'
  3. Verifique se hoje é um dia útil (não sábado ou domingo): weekday != 6 AND weekday != 7
  4. Combine as condições para escrever durante o horário comercial: current_time >= '9:00' AND current_time <= '18:00' AND weekday != 6 AND weekday != 7
  5. Combine as condições para escrever fora do horário comercial: current_time < '9:00' OR current_time > '18:00' OR weekday == 6 OR weekday == 7

Como converter data e hora

O formato de data e hora usado varia entre sistemas, e é possível que um dos recursos integrados retorne uma hora em um formato que o MaviBot não reconhece. Você precisará convertê-lo.

convert_datetime(date, fin, f_out) - converte data e hora

Existem três parâmetros:

  • String de data de entrada
  • String de formato de entrada
  • String de formato de saída

Exemplo:
convert_datetime("2011-11-03", "%Y-%m-%d", "%Y/%m/%d") na saída será 2011/11/03

Esta função converte a data de entrada em um timestamp.

#{current_date} #{current_time} - converte para "06.01.2025 11:45" — como não há informações sobre segundos ou microssegundos, o timestamp resultante tem zeros após o ponto decimal.

Por exemplo: 1736144700.000000

Se você incluir milissegundos após o ponto decimal,

convert_datetime("06.01.2025 19:26:35.123456", "%d.%m.%Y %H:%M:%S.%f", "%s.%f")

o resultado será: 1736166395.123456

get_datetime(format) - uma função para obter a hora atual em um formato específico.

A função recebe um parâmetro — uma string que especifica o formato de saída desejado.

Importante! A resposta da função será (Segunda, Terça, etc.).

Exemplo: get_datetime("%A") a saída será Quarta

Descrição dos parâmetros da string de formato, que são especificados na função como strings entre aspas:

Todos os outros símbolos representam a si mesmos.

Você pode obter o timestamp atual usando: convert_datetime("#{current_date} #{current_time}", "%d.%m.%Y %H:%M", "%s")

Exibir data atual no formato "dd nome do mês"

Para exibir a data no formato "dd nome do mês", use a função current_date_eng().

Se você precisar adicionar um certo número de dias a esta data, deve especificar o número de dias necessário como parâmetro na função.

Por exemplo, se a data de hoje é 3 de abril, a função retornará:

current_date_eng() - 3 de abril

current_date_eng(2) - 5 de abril

current_date_eng(-2) - 1 de abril