Trabajar con fechas y hora
MaviBot funciona con los siguientes formatos de FECHA y HORA:
para fechas – "dd.mm.aaaa" para hora – "HH:MM"
Variables
Para trabajar con fechas y hora, puedes usar las siguientes variables:
current_date - fecha actual en formato dd.mm.aaaa, según la zona horaria del proyecto next_day - fecha de mañana en formato dd.mm.aaaa; útil para programar mensajes current_time - hora actual en formato hh:mm, según la zona horaria del proyecto weekday - día de la semana como número: lunes = 1, martes = 2, etc.
Acceso rápido a las descripciones de las funciones:
Cómo sumar tiempo a tiempo
Puedes comparar fechas y horas usando operadores lógicos igual que con los números.
addYear() | addMonth() | addDays() | addMinutes()
Descripción
addYear(date, years_to_add) - calcula una nueva fecha sumando el número especificado de años a la fecha dada, teniendo en cuenta los años bisiestos. Usa un número negativo para restar años.
addMonth(date, months_to_add) - calcula una nueva fecha sumando el número especificado de meses a la fecha dada, teniendo en cuenta los años bisiestos. Usa un número negativo para restar meses.
addDays(date, days_to_add) - suma el número especificado de días a la fecha. Usa un número negativo para restar días. Ejemplo: addDays(current_date, 20) o addDays('20.08.2019', -99)
addMinutes(time, minutes_to_add) - suma el número especificado de minutos a la hora. Usa un número negativo para restar minutos. Ejemplo: addMinutes(current_time, 20) o addMinutes('20:08', -30)
'date' + days - suma el número especificado de días a la fecha
'time' + minutes - suma el número especificado de minutos a la hora
Ejemplos
Ejemplo de suma de una cierta cantidad de años a una fecha:


Ejemplo de suma de una cierta cantidad de meses a una fecha:


Ejemplo de uso de una operación matemática simple: sumar días a una fecha y minutos a una hora:


Ejemplo 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)
Cómo comparar hora
Descripción
Puedes comparar fechas y horas usando operadores lógicos igual que con los números: mayor que > , menor que < igual a == , distinto de != mayor o igual que >= , menor o igual que <=
Las condiciones de comparación también se pueden combinar usando los operadores lógicos AND y OR.
Las condiciones de comparación deben ser lógicamente coherentes, lo que significa que no puedes crear condiciones como a == 1 y a != 1, ya que un valor no puede ser igual y distinto de 1 al mismo tiempo.
Las condiciones de comparación se introducen en el "Variable" campo.

Asegúrate de usar retrasos al especificar las condiciones de comparación en una flecha.

Ejemplo
'01.09.2020' < '11.10.2020'
'11.10.2020' >= current_date
current_date == date
current_time >= '18:00'
current_time <= '21:00'
Cómo establecer intervalos de tiempo
Descripción
Una función muy útil para trabajar con intervalos de tiempo es:
time_interval('start_time', 'end_time')
La función devuelve lógico True o Falso.
Usa esta función en bloques como condición en el "Variable a comparar" campo o dentro de una calculadora usando IF().
La función permite comprobar si la hora actual se encuentra dentro del intervalo especificado.
Ejemplo
time_interval('10:00','19:00') - comprueba el intervalo de tiempo de 10:00 a 19:00
time_interval('19:00','07:00') - comprueba el intervalo de tiempo de 19:00 a 07:00
time_interval('18.10.2021 10:00','25.10.2021 23:59:59') - comprueba el intervalo de tiempo entre distintas fechas
time_interval('#{current_date} 10:00','#{date} 19:00') - comprueba el intervalo de tiempo establecido usando variables
Veamos más de cerca el primer ejemplo. La función se interpreta de la siguiente manera:
Si el usuario envía un mensaje que contiene la palabra "time" durante el período de 10:00 a 19:00, la condición devuelve true; de lo contrario, devuelve false.
Esto te permite crear respuestas diferentes según la hora de la solicitud del cliente. Por ejemplo, si la hora actual está entre las 10:00 y las 19:00, el cliente recibirá: "Un gerente te responderá en breve."
A cualquier otra hora, recibirá: "El gerente no está disponible en este momento; recibirás una respuesta durante el horario laboral a partir de las 10:00."
En el campo Calculadora, introduce:
response = if(time_interval('10:00','19:00'), "Un gerente te responderá en breve", "El gerente no está disponible en este momento; recibirás una respuesta durante el horario laboral a partir de las 10:00")
En el campo "Mensaje", introduce: #{response}


Ejemplo de código para copiar
response = if(time_interval('10:00','19:00'), "Un gerente te responderá en breve", "El gerente no está disponible en este momento; recibirás una respuesta durante el horario laboral a partir de las 10:00")
Cómo averiguar cuánto tiempo falta hasta el día D
Ejemplo

Para calcular cuánto tiempo falta hasta el día D:
Define la fecha y la hora del momento objetivo hasta el que deseas hacer la cuenta atrás.
date_D = 10.10.2021 time_D = 12:00
Convértelo a formato timestamp :
timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")
Captura la hora actual en timestamp :
timestamp0 = #{timestamp}
Redondea los valores obtenidos a números enteros:
timeD = int(#{timestampD}) time0 = int(#{timestamp0})
Calcula la diferencia en segundos:
time = timeD - time0
Divide por el número de segundos en un día y redondea el resultado:
full_days = time/86400
days = int(#{full_days})
Calcula cuántos segundos quedan del día parcial:
c = days*86400
d = time - c
Calcula a cuántas horas corresponde esto y redondea el valor:
e = d/3600 hours = int(e)
Calcula cuántos segundos quedan de las horas parciales:
g = hours*3600
h = d - g
Convierte esto a minutos y redondea el valor:
i = h/60
minutes = int(i)
Calcula cuántos segundos quedan:
k = minutes*60
seconds = h - k
Y muestra el tiempo en el "Texto del mensaje" :
Tiempo restante hasta el inicio: #{days} días #{hours} horas #{minutes} minutos y #{seconds} segundos
Aquí está el código para insertar en el "Calculadora" :

El Calculadora también admite restar fechas y horas sin conversión de tipo. Por ejemplo:
'11.12.2021' - '8.12.2021' devuelve 3 (días)
'11:12' - '3:45' devuelve 447 (minutos)
Cómo averiguar el próximo cumpleaños
Descripción
Para que el bot envíe felicitaciones de cumpleaños, puedes usar la función:
birthdate(date) - devuelve el próximo cumpleaños a partir de la fecha de nacimiento de la persona: reminder = birthdate('28.04.1994')
Cómo obtener la fecha de un día específico de la semana
Descripción
Si tienes envíos recurrentes en días específicos de la semana, puedes obtener la fecha de un día de la semana para programar el envío.
weekday_date(weekday, b) - devuelve la fecha del día de la semana especificado más cercano. Toma dos parámetros:
El primer parámetro es el número del día de la semana a buscar (de 1 a 7, donde 1 = lunes, 7 = domingo).
El segundo parámetro indica si devolver la fecha de hoy si el día de la semana especificado es hoy. Este parámetro es opcional y su valor predeterminado es False.
Veamos un ejemplo para entender cómo funciona el segundo parámetro:
Quieres programar un mensaje para que se envíe el jueves.
¿Pero qué pasa si el cliente se registró justamente un jueves?
¿Debe enviarse el mensaje este jueves o el siguiente?
El segundo parámetro establecido en False significa que el mensaje se enviará solo el próximo jueves (omitiendo hoy).
El segundo parámetro establecido en True significa que el mensaje se enviará este jueves, si hoy es jueves (incluyendo el día de registro).
En nuestro ejemplo, el usuario se registra el jueves, 13.02.2025, y queremos enviar el mensaje el próximo jueves. Por lo tanto, el valor devuelto será "20.02.2025".
Por ejemplo, weekday_date(4) devolverá '20.02.2025'.
Si quieres que el día actual cuente solo hasta cierta hora, puedes usar esta construcción:
weekday_date(4, current_time < '13:00'), donde la condición puede reemplazarse por cualquier condición que necesites.
Aquí tienes un ejemplo de cómo usar la función:
Ejemplo de uso de la función en el campo "Fecha de envío" de una conexión

Cómo obtener la fecha de un día específico del mes
Descripción
Si tienes acciones recurrentes en un día específico del mes, puedes obtener la fecha de la ocurrencia más cercana de ese día para programar tu envío.
month_date(date, b) - devuelve la fecha más cercana del mes para el número de día especificado. Toma dos parámetros:
date - número de día del mes a buscar (de 1 a 31)
b - parámetro opcional; indica si debe devolver la fecha de hoy si coincide con el día especificado. El valor predeterminado es False.
Si pasas 31 pero el mes actual solo tiene 30 días, la función devolverá el último día del mes (por ejemplo, el 30).
Por ejemplo:
Si hoy es 05.04.2022 y llamas a t = month_date(1), el resultado será 01.05.2022, el 1.º del mes más cercano después de hoy.
Cómo comprobar si la hora actual está dentro del horario laboral
Descripción
Por ejemplo, la empresa trabaja de 9:00 a. m. a 6:00 p. m. y cierra los sábados y domingos. Vamos a construir las comprobaciones paso a paso:
Comprueba si la hora está dentro del horario laboral: current_time >= '9:00' Y current_time <= '18:00'
Comprueba si la hora está fuera del horario laboral: current_time < '9:00' O current_time > '18:00'
Comprueba si hoy es un día laborable (no sábado ni domingo): weekday != 6 AND weekday != 7
Combina condiciones para escribir durante el horario laboral: current_time >= '9:00' Y current_time <= '18:00' Y weekday != 6 Y weekday != 7
Combina condiciones para escribir fuera del horario laboral: current_time < '9:00' O current_time > '18:00' O weekday == 6 O weekday == 7
Cómo convertir fecha y hora
Ejemplo
El formato de fecha y hora utilizado varía entre sistemas, y es posible que uno de los recursos integrados devuelva una hora en un formato que MaviBot no reconozca. Tendrás que convertirlo.
convert_datetime(date, fin, f_out) - convierte fecha y hora
Hay tres parámetros:
Cadena de fecha de entrada
Cadena de formato de entrada
Cadena de formato de salida
Ejemplo:
convert_datetime("2011-11-03", "%Y-%m-%d", "%Y/%m/%d") en la salida será 2011/11/03
Esta función convierte la fecha de entrada en un timestamp.
#{current_date} #{current_time} - convierte a "06.01.2025 11:45" — como no hay información sobre segundos ni microsegundos, la marca de tiempo resultante tiene ceros después del punto decimal.
Por ejemplo: 1736144700.000000
Si incluyes milisegundos después del punto decimal,
convert_datetime("06.01.2025 19:26:35.123456", "%d.%m.%Y %H:%M:%S.%f", "%s.%f")
el resultado será: 1736166395.123456
get_datetime(format) - una función para obtener la hora actual en un formato específico. La función toma un parámetro: una cadena que especifica el formato de salida deseado.
¡Importante! La respuesta de la función será (lunes, martes, etc.). Ejemplo: get_datetime("%A") la salida será miércoles
Descripción de los parámetros de la cadena de formato, que se especifican en la función como cadenas entre comillas:
%a
Nombre corto del día de la semana
Dom, Lun ...
%A
Nombre completo del día de la semana
Lunes, martes, …, domingo
%w
Día de la semana como número decimal, donde 0 es domingo y 6 es sábado
0, 1, …, 6
%d
Día del mes como número decimal con ceros a la izquierda
01, 02, …, 31
%b
Nombre corto del mes
Ene, Feb, …, Dic
%B
Nombre completo del mes
Enero, febrero, marzo, etc.
%m
Mes como número decimal con ceros a la izquierda
01, 02, …, 12
%y
Año como número de dos dígitos
00, 01, …, 99
%Y
Año como número de cuatro dígitos
0001, 0002, …, 2013, 2014, …, 9998, 9999
%H
Hora (reloj de 24 horas) como número de dos dígitos con ceros a la izquierda
00, 01, …, 23
%I
Hora (reloj de 12 horas) como número de dos dígitos con ceros a la izquierda
01, 02, …, 12
%p
Indicador AM o PM
AM, PM (en_US);am, pm (de_DE)
%M
Minutos como número de dos dígitos con ceros a la izquierda
00, 01, …, 59
%S
Segundos como número de dos dígitos con ceros a la izquierda
00, 01, …, 59
%f
Microsegundos como número de seis dígitos con ceros a la izquierda
000000, 000001, …, 999999
%z
Desplazamiento UTC en la forma ±HHMM[SS[.ffffff]] (cadena vacía si el objeto no tiene zona horaria).
(vacío), +0000, -0400, +1030, +063415, -030712.345216
%Z
Nombre de la zona horaria (cadena vacía si el objeto no tiene zona horaria).
(vacío), UTC, GMT
%j
Día del año como número de tres dígitos con ceros a la izquierda
001, 002, …, 366
%U
Número de semana del año (con domingo como primer día de la semana) como número decimal con ceros a la izquierda. Todos los días del nuevo año anteriores al primer domingo se consideran semana cero.
00, 01, …, 53
%W
Número de semana del año (con lunes como primer día de la semana) como número decimal. Todos los días del nuevo año anteriores al primer lunes se consideran semana cero.
00, 01, …, 53
%%
Símbolo '%'
%
%s
timestamp
1607926200
Todos los demás símbolos representan a sí mismos.
Puedes obtener la marca de tiempo actual usando: convert_datetime("#{current_date} #{current_time}", "%d.%m.%Y %H:%M", "%s")
Mostrar la fecha actual en formato "dd nombre del mes"
Ejemplo
Para mostrar la fecha en formato "dd nombre del mes", usa la función current_date_eng().
Si necesitas añadir un cierto número de días a esta fecha, debes especificar el número requerido de días como parámetro en la función.
Por ejemplo, si la fecha de hoy es 3 de abril, entonces la función devolverá:
current_date_eng() - 3 de abril
current_date_eng(2) - 5 de abril
current_date_eng(-2) - 1 de abril
Última actualización
