Trabalhando com datas e horários
O MaviBot funciona com os seguintes formatos de DATA e HORA:
para datas – "dd.mm.aaaa" para hora – "HH:MM"
Variáveis
Para trabalhar com datas e hora, você pode usar as seguintes variáveis:
current_date - data atual no formato dd.mm.aaaa, com base no fuso horário do projeto next_day - data de amanhã no formato dd.mm.aaaa; útil para agendar mensagens current_time - hora atual no formato hh:mm, com base no fuso horário do projeto weekday - dia da semana como número: segunda-feira = 1, terça-feira = 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 da mesma forma que números.
addYear() | addMonth() | addDays() | addMinutes()
Descrição
addYear(date, years_to_add) - calcula uma nova data adicionando o número especificado de anos à data fornecida, levando em conta os anos bissextos. Use número negativo para subtrair anos.
addMonth(date, months_to_add) - calcula uma nova data adicionando o número especificado de meses à data fornecida, levando em conta os anos bissextos. Use número negativo para subtrair meses.
addDays(date, days_to_add) - adiciona o número especificado de dias à data. Use número negativo para subtrair dias. Exemplo: addDays(current_date, 20) ou addDays('20.08.2019', -99)
addMinutes(time, minutes_to_add) - adiciona o número especificado de minutos à hora. Use número negativo para subtrair minutos. Exemplo: addMinutes(current_time, 20) ou addMinutes('20:08', -30)
'date' + days - adiciona o número especificado de dias à data
'time' + minutes - adiciona o número especificado de minutos à hora
Exemplos
Exemplo de adicionar uma certa quantidade de anos a uma data:


Exemplo de adicionar uma certa quantidade de meses a uma data:


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


Exemplo de código para copiar
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
Descrição
Você pode comparar datas e horas usando operadores lógicos da mesma forma que 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, já que um valor não pode ser igual e diferente de 1 ao mesmo tempo.
As condições de comparação são inseridas no "Variável" .

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

Exemplo
'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
Descrição
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 Falso.
Use essa função em blocos como condição no campo "Variável para comparar" ou dentro de uma calculadora usando IF().
A função permite verificar se a hora atual se enquadra no intervalo especificado.
Exemplo
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 dar uma olhada mais de perto no primeiro exemplo. A função funciona da seguinte forma:
Se o usuário enviar uma mensagem contendo a palavra "time" durante o período de 10:00 a 19:00, a condição retorna true; caso contrário, retorna false.
Isso permite criar respostas diferentes dependendo do horário 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, ele receberá: "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}


Exemplo de código para copiar
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
Exemplo

Para calcular quanto tempo falta até o dia D:
Defina a data e a hora do momento-alvo até o qual você deseja fazer a contagem regressiva.
date_D = 10.10.2021 time_D = 12:00
Converta isso para o formato timestamp :
timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")
Capture a hora atual em 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 "Texto da mensagem" “Broadcast para clientes dos blocos”
Tempo restante até o início: #{days} dias #{hours} horas #{minutes} minutos e #{seconds} segundos
Aqui está o código para inserir no "Calculadora" “Broadcast para clientes dos blocos”

O Calculadora também suporta subtrair 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
Descrição
Para fazer o bot enviar felicitaçõ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 específico da semana
Descrição
Se você tiver envios recorrentes em dias específicos da semana, 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. Ela recebe dois parâmetros:
O primeiro parâmetro é o número do dia da semana a encontrar (de 1 a 7, onde 1 = segunda-feira, 7 = domingo).
O segundo parâmetro indica se deve retornar a data de hoje se o dia da semana especificado for hoje. Esse parâmetro é opcional e, por padrão, é False.
Vamos ver um exemplo para entender como o segundo parâmetro funciona:
Você quer agendar uma mensagem para ser enviada na quinta-feira.
Mas e se o cliente acabou de se cadastrar 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 (ignorando 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 cadastro).
No nosso exemplo, o usuário se cadastra na quinta-feira, 13.02.2025, e queremos enviar a mensagem na próxima quinta-feira. Portanto, 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 de que você precise.
Veja 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
Descrição
Se você tiver ações recorrentes em um dia específico do mês, pode obter a data da 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 de dia especificado. Ela recebe dois parâmetros:
date - número do dia do mês a encontrar (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ê informar 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 for 05.04.2022 e você chamar t = month_date(1), o resultado será 01.05.2022 - o 1º dia do mês mais próximo após hoje.
Como verificar se a hora atual está dentro do horário de trabalho
Descrição
Por exemplo, a empresa funciona das 9:00 às 18:00 e fica fechada aos sábados e domingos. Vamos construir as verificações passo a passo:
Verifique se a hora está dentro do horário de trabalho: current_time >= '9:00' E current_time <= '18:00'
Verifique se a hora está fora do horário de trabalho: current_time < '9:00' OU current_time > '18:00'
Verifique se hoje é um dia útil (não é sábado nem domingo): weekday != 6 AND weekday != 7
Combine as condições para escrever durante o horário de trabalho: current_time >= '9:00' E current_time <= '18:00' E weekday != 6 E weekday != 7
Combine as condições para escrever fora do horário de trabalho: current_time < '9:00' OU current_time > '18:00' OU weekday == 6 OU weekday == 7
Como converter data e hora
Exemplo
O formato de data e hora usado varia entre sistemas, e é possível que um dos recursos integrados retorne um horário em um formato que o MaviBot não reconheça. Você precisará convertê-lo.
convert_datetime(date, fin, f_out) - converte data e hora
Há 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") на saída будет 2011/11/03
Esta função converte a data recebida em timestamp.
#{current_date} #{current_time} - converte para "06.01.2025 11:45" — como não há informação sobre segundos ou microssegundos, o timestamp resultante tem zeros após a vírgula decimal.
Por exemplo: 1736144700.000000
Se você incluir milissegundos após a vírgula 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-feira, terça-feira, etc.). Exemplo: get_datetime("%A") a saída será quarta-feira
Descrição dos parâmetros da string de formato, que são especificados na função como strings entre aspas:
%a
Nome abreviado do dia da semana
dom, seg ...
%A
Nome completo do dia da semana
segunda-feira, terça-feira, …, domingo
%w
Dia da semana como número decimal, onde 0 é domingo e 6 é sábado
0, 1, …, 6
%d
Dia do mês como número decimal com zero à esquerda
01, 02, …, 31
%b
Nome abreviado do mês
jan, fev, …, dez
%B
Nome completo do mês
janeiro, fevereiro, março, etc.
%m
Mês como número decimal com zero à esquerda
01, 02, …, 12
%y
Ano como número de dois dígitos
00, 01, …, 99
%Y
Ano como número de quatro dígitos
0001, 0002, …, 2013, 2014, …, 9998, 9999
%H
Hora (formato 24 horas) como número de dois dígitos com zero à esquerda
00, 01, …, 23
%I
Hora (formato 12 horas) como número de dois dígitos com zero à esquerda
01, 02, …, 12
%p
Indicador de AM ou PM
AM, PM (en_US);am, pm (de_DE)
%M
Minutos como número de dois dígitos com zero à esquerda
00, 01, …, 59
%S
Segundos como número de dois dígitos com zero à esquerda
00, 01, …, 59
%f
Microssegundos como número de seis dígitos com zero à esquerda
000000, 000001, …, 999999
%z
Fuso horário UTC no formato ±HHMM[SS[.ffffff]] (string vazia se o objeto for ingênuo).
(vazio), +0000, -0400, +1030, +063415, -030712.345216
%Z
Nome do fuso horário (string vazia se o objeto for ingênuo).
(vazio), UTC, GMT
%j
Dia do ano como número de três dígitos com zero à esquerda
001, 002, …, 366
%U
Número da semana do ano (com domingo como primeiro dia da semana) como número decimal com zero à esquerda. Todos os dias do novo ano anteriores ao primeiro domingo são considerados semana zero.
00, 01, …, 53
%W
Número da semana do ano (com segunda-feira como primeiro dia da semana) como número decimal. Todos os dias do novo ano anteriores à primeira segunda-feira são considerados semana zero.
00, 01, …, 53
%%
Símbolo '%'
%
%s
timestamp
1607926200
Todos os demais 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 a data atual no formato "dd nome do mês"
Exemplo
Para exibir a data no formato "dd nome do mês", use a função current_date_eng().
Se você precisar adicionar uma certa quantidade de dias a esta data, deve especificar o número necessário de dias como parâmetro na função.
Por exemplo, se a data de hoje for 3 de abril, então a função retornará:
current_date_eng() - 3 de abril
current_date_eng(2) - 5 de abril
current_date_eng(-2) - 1º de abril
Atualizado
