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:
- Adicionar tempo ao tempo
- Comparar tempo
- Definir intervalos de tempo
- Calcular o tempo até o dia D
- Encontrar o próximo aniversário
- Obter a data de um dia da semana específico
- Obter a data de um dia específico do mês
- Verificar se está dentro do horário comercial
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:
- Verifique se a hora está dentro do horário comercial: current_time >= '9:00' AND current_time <= '18:00'
- Verifique se a hora está fora do horário comercial: current_time < '9:00' OR current_time > '18:00'
- Verifique se hoje é um dia útil (não sábado ou domingo): weekday != 6 AND weekday != 7
- 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
- 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


