Trabalhando com datas e horários

circle-info

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

circle-info

Você pode comparar datas e horas usando operadores lógicos da mesma forma que números.

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

chevron-rightDescriçãohashtag

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

chevron-rightExemploshashtag

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:

chevron-rightExemplo de código para copiarhashtag

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

chevron-rightDescriçãohashtag

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.

circle-exclamation

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.

chevron-rightExemplohashtag

'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

chevron-rightDescriçãohashtag

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().

circle-info

A função permite verificar se a hora atual se enquadra no intervalo especificado.

chevron-rightExemplohashtag

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}

chevron-rightExemplo de código para copiarhashtag

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

chevron-rightExemplohashtag

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

chevron-rightDescriçãohashtag

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

chevron-rightDescriçãohashtag

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

chevron-rightDescriçãohashtag

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

chevron-rightDescriçãohashtag

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:

  1. Verifique se a hora está dentro do horário de trabalho: current_time >= '9:00' E current_time <= '18:00'

  2. Verifique se a hora está fora do horário de trabalho: current_time < '9:00' OU current_time > '18:00'

  3. Verifique se hoje é um dia útil (não é sábado nem domingo): weekday != 6 AND weekday != 7

  4. 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

  5. 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

chevron-rightExemplohashtag

Como converter data e hora

chevron-rightExemplohashtag

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.

circle-info

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.

circle-info

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"

chevron-rightExemplohashtag

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