Trabajar con fechas y hora

circle-info

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

circle-info

Puedes comparar fechas y horas usando operadores lógicos igual que con los números.

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

chevron-rightDescripciónhashtag

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

chevron-rightEjemploshashtag

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:

chevron-rightEjemplo 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)

Cómo comparar hora

chevron-rightDescripciónhashtag

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.

circle-exclamation

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.

chevron-rightEjemplohashtag

'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

chevron-rightDescripciónhashtag

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

circle-info

La función permite comprobar si la hora actual se encuentra dentro del intervalo especificado.

chevron-rightEjemplohashtag

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}

chevron-rightEjemplo de código para copiarhashtag

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

chevron-rightEjemplohashtag

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

chevron-rightDescripciónhashtag

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

chevron-rightDescripciónhashtag

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

chevron-rightDescripciónhashtag

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

chevron-rightDescripciónhashtag

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:

  1. Comprueba si la hora está dentro del horario laboral: current_time >= '9:00' Y current_time <= '18:00'

  2. Comprueba si la hora está fuera del horario laboral: current_time < '9:00' O current_time > '18:00'

  3. Comprueba si hoy es un día laborable (no sábado ni domingo): weekday != 6 AND weekday != 7

  4. Combina condiciones para escribir durante el horario laboral: current_time >= '9:00' Y current_time <= '18:00' Y weekday != 6 Y weekday != 7

  5. Combina condiciones para escribir fuera del horario laboral: current_time < '9:00' O current_time > '18:00' O weekday == 6 O weekday == 7

chevron-rightEjemplohashtag

Cómo convertir fecha y hora

chevron-rightEjemplohashtag

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.

circle-info

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

circle-info

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"

chevron-rightEjemplohashtag

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