MaviBot trabaja con los siguientes formatos de FECHA y HORA:
para fechas – "dd.mm.yyyy"
para horas – "HH:MM"
Variables
Para trabajar con fechas y horas, puedes usar las siguientes variables:
current_date - fecha actual en formato dd.mm.yyyy, basada en la zona horaria del proyecto
next_day - fecha de mañana en formato dd.mm.yyyy; útil para programar mensajes
current_time - hora actual en formato hh:mm, basada en 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 funciones:
- Añadir tiempo a una hora
- Comparar horas
- Establecer intervalos de tiempo
- Calcular el tiempo hasta el día D
- Encontrar el próximo cumpleaños
- Obtener la fecha de un día de la semana específico
- Obtener la fecha de un día específico del mes
- Comprobar si está dentro del horario laboral
Cómo añadir tiempo a una hora
Puedes comparar fechas y horas usando operadores lógicos como si fueran números.
addYear() | addMonth() | addDays() | addMinutes()
addYear(fecha, años_a_añadir) - 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(fecha, meses_a_añadir) - 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(fecha, días_a_añadir) - 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(hora, minutos_a_añadir) - 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)
'fecha' + días - suma el número especificado de días a la fecha
'hora' + minutos - suma el número especificado de minutos a la hora
Ejemplo de sumar un número determinado de años a una fecha:


Ejemplo de sumar un número determinado 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:


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 horas
Puedes comparar fechas y horas usando operadores lógicos como si fueran números:
mayor que > , menor que <
igual a == , no igual a !=
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 consistentes, lo que significa que no puedes crear condiciones como a == 1 y a != 1, ya que un valor no puede ser igual y no igual a 1 al mismo tiempo.
Las condiciones de comparación se ingresan en el campo "Variable".

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

'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
Una función muy útil para trabajar con intervalos de tiempo es:
time_interval('hora_inicio', 'hora_fin')
La función devuelve un valor lógico True o False.
Usa esta función en bloques como condición en el campo "Variable a comparar" o dentro de una calculadora usando IF().
La función permite comprobar si la hora actual se encuentra dentro del intervalo especificado.
time_interval('10:00','19:00') - comprueba el intervalo de tiempo de 10 AM a 7 PM
time_interval('19:00','07:00') - comprueba el intervalo de tiempo de 7 PM a 7 AM
time_interval('18.10.2021 10:00','25.10.2021 23:59:59') - comprueba el intervalo de tiempo entre diferentes fechas
time_interval('#{current_date} 10:00','#{date} 19:00') - comprueba el intervalo de tiempo establecido usando variables
Analicemos más de cerca el primer ejemplo. La función se lee de la siguiente manera:
Si el usuario envía un mensaje que contiene la palabra "hora" durante el período de 10:00 a 19:00, la condición devuelve verdadero; de lo contrario, devuelve falso.
Esto te permite crear diferentes respuestas dependiendo de 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á pronto."
En cualquier otro momento, recibirá:
"El gerente no está disponible actualmente; recibirás una respuesta durante el horario laboral a partir de las 10:00."
En el campo de la Calculadora, ingresa:
response = if(time_interval('10:00','19:00'), "Un gerente te responderá pronto", "El gerente no está disponible actualmente; recibirás una respuesta durante el horario laboral a partir de las 10:00")
En el campo "Mensaje", ingresa: #{response}


response = if(time_interval('10:00','19:00'), "Un gerente te responderá pronto", "El gerente no está disponible actualmente; recibirás una respuesta durante el horario laboral a partir de las 10:00")
Cómo saber cuánto tiempo queda hasta el día D

Para calcular cuánto tiempo queda hasta el día D:
Define la fecha y hora del momento objetivo al que quieres hacer la cuenta regresiva.
date_D = 10.10.2021 time_D = 12:00
Conviértelo al formato timestamp:
timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")
Captura la hora actual en formato 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 la hora en el campo "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 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

La 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 encontrar el próximo cumpleaños
Para que el bot envíe saludos de cumpleaños, puedes usar la función:
birthdate(fecha) - devuelve el próximo cumpleaños basado en la fecha de nacimiento de la persona: reminder = birthdate('28.04.1994')
Cómo obtener la fecha de un día de la semana específico
Si tienes envíos recurrentes en días de la semana específicos, puedes obtener la fecha de un día de la semana para programar el envío.
weekday_date(día_semana, b) - devuelve la fecha del día de la semana más cercano especificado. Toma dos parámetros:
El primer parámetro es el número del día de la semana a encontrar (del 1 al 7, donde 1 = lunes, 7 = domingo).
El segundo parámetro indica si debe devolver la fecha de hoy si el día de la semana especificado es hoy. Este parámetro es opcional y por defecto 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, ¿y si el cliente se acaba de registrar un jueves?
¿Debería enviarse el mensaje este jueves o el próximo?
El segundo parámetro establecido en False significa que el mensaje se enviará solo el próximo jueves (saltándose 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 una hora determinada, puedes usar esta construcción:
weekday_date(4, current_time < '13:00'), donde la condición se puede reemplazar con cualquier condición que necesites.
Aquí hay 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
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(fecha, b) - devuelve la fecha más cercana del mes para el número de día especificado. Toma dos parámetros:
fecha - número del día del mes a encontrar (del 1 al 31)
b - parámetro opcional; indica si debe devolver la fecha de hoy si coincide con el día especificado. Por defecto 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 día 1 más cercano del mes después de hoy.
Cómo comprobar si la hora actual está dentro del horario laboral
Por ejemplo, la empresa trabaja de 9:00 AM a 6:00 PM y está cerrada los sábados y domingos. Construyamos las comprobaciones paso a paso:
- Comprobar si la hora está dentro del horario laboral: current_time >= '9:00' AND current_time <= '18:00'
- Comprobar si la hora está fuera del horario laboral: current_time < '9:00' OR current_time > '18:00'
- Comprobar si hoy es un día laborable (no sábado ni domingo): weekday != 6 AND weekday != 7
- Combinar condiciones para escribir durante el horario laboral: current_time >= '9:00' AND current_time <= '18:00' AND weekday != 6 AND weekday != 7
- Combinar condiciones para escribir fuera del horario laboral: current_time < '9:00' OR current_time > '18:00' OR weekday == 6 OR weekday == 7

Cómo convertir fecha y hora
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 reconoce. Necesitarás convertirlo.
convert_datetime(fecha, 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") la salida será 2011/11/03
Esta función convierte la fecha entrante en un timestamp.
#{current_date} #{current_time} - convierte a "06.01.2025 11:45" — como no hay información sobre segundos o microsegundos, el timestamp 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(formato) - 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:
Todos los demás símbolos se representan a sí mismos.
Puedes obtener el timestamp actual usando: convert_datetime("#{current_date} #{current_time}", "%d.%m.%Y %H:%M", "%s")
Mostrar la fecha actual en el formato "dd nombre del mes"
Para mostrar la fecha en el formato "dd nombre del mes", usa la función current_date_eng().
Si necesitas añadir un número determinado de días a esta fecha, debes especificar el número de días requerido 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


