# Travailler avec les dates et l’heure

{% hint style="info" %}
MaviBot fonctionne avec les formats DATE et HEURE suivants :

pour les dates – **"jj.mm.aaaa"**\
pour l'heure – **"HH:MM"**
{% endhint %}

### Variables

Pour travailler avec les dates et l'heure, vous pouvez utiliser les variables suivantes :

**current\_date** - date actuelle au format jj.mm.aaaa, basée sur le fuseau horaire du projet\
**next\_day** - date de demain au format jj.mm.aaaa ; utile pour la planification des messages\
**current\_time** - heure actuelle au format hh:mm, basée sur le fuseau horaire du projet\
**weekday** - jour de la semaine sous forme de nombre : lundi = 1, mardi = 2, etc.

**Accès rapide aux descriptions des fonctions :**

* [Ajouter du temps à du temps](#how-to-add-time-to-time)&#x20;
* [Comparer l'heure](#how-to-compare-time)&#x20;
* [Définir des intervalles de temps](#how-to-set-time-intervals)&#x20;
* [Calculer le temps jusqu'au jour D ](#how-to-find-out-how-much-time-is-left-until-day-d)
* [Trouver le prochain anniversaire](#how-to-find-out-the-next-birthday)&#x20;
* [Obtenir la date d'un jour de semaine spécifique ](#how-to-get-the-date-of-a-specific-weekday)
* [Obtenir la date d'un jour spécifique du mois](#how-to-get-the-date-of-a-specific-day-of-month)&#x20;
* [Vérifier si c'est pendant les heures de travail](#how-to-check-if-the-current-time-is-within-working-hours)

### Comment ajouter du temps à du temps&#x20;

{% hint style="info" %}
Vous pouvez comparer des dates et des heures à l'aide d'opérateurs logiques, tout comme des nombres.
{% endhint %}

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

<details>

<summary>Description</summary>

**addYear(date, years\_to\_add) -** calcule une nouvelle date en ajoutant le nombre d'années spécifié à la date donnée, en tenant compte des années bissextiles. Utilisez un nombre négatif pour soustraire des années.

**addMonth(date, months\_to\_add)** - calcule une nouvelle date en ajoutant le nombre de mois spécifié à la date donnée, en tenant compte des années bissextiles. Utilisez un nombre négatif pour soustraire des mois.

**addDays(date, days\_to\_add) -** ajoute le nombre de jours spécifié à la date. Utilisez un nombre négatif pour soustraire des jours. Exemple : `addDays(current_date, 20)` ou `addDays('20.08.2019', -99)`

**addMinutes(time, minutes\_to\_add) -** ajoute le nombre de minutes spécifié à l'heure. Utilisez un nombre négatif pour soustraire des minutes. Exemple : `addMinutes(current_time, 20)` ou `addMinutes('20:08', -30)`

**'date' + jours** - ajoute le nombre de jours spécifié à la date

**'heure' + minutes** - ajoute le nombre de minutes spécifié à l'heure

</details>

<details>

<summary>Exemples</summary>

Exemple d'ajout d'un certain nombre d'années à une date :

<div data-with-frame="true"><figure><img src="/files/a7080075b8a0efdfabc6e178f8ac352f732437f8" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/8977a17da3b28aa49dd2c2fd8c7cbb124ab50e85" alt="" width="375"><figcaption></figcaption></figure></div>

Exemple d'ajout d'un certain nombre de mois à une date :

<div data-with-frame="true"><figure><img src="/files/c70e6b281f4a4185567a884bcb7506731491b895" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/7dd889eafd8aea6dc4c7634653f2241836459f9c" alt="" width="375"><figcaption></figcaption></figure></div>

Exemple d'utilisation d'une simple opération mathématique — ajout de jours à une date et de minutes à une heure :

<div data-with-frame="true"><figure><img src="/files/e364efd2dd2d4cfdc2ee97a7e61db1fa968eda96" alt="" width="375"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/c09b60f67650b47bc370693ab59f166f0230e00e" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Exemple de code à copier</summary>

`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)`

</details>

### Comment comparer l'heure&#x20;

<details>

<summary>Description</summary>

Vous pouvez comparer des dates et des heures à l'aide d'opérateurs logiques, tout comme des nombres :\
supérieur à > , inférieur à <\
égal à == , différent de !=\
supérieur ou égal à >= , inférieur ou égal à <=

Les conditions de comparaison peuvent également être combinées à l'aide des opérateurs logiques ET et OU.

{% hint style="warning" %}
**Les conditions de comparaison doivent être logiquement cohérentes**, ce qui signifie que vous ne pouvez pas créer des conditions comme a == 1 et a != 1, car une valeur ne peut pas être à la fois égale et différente de 1 en même temps.
{% endhint %}

Les conditions de comparaison sont saisies dans le **champ « Variable »** .

<div data-with-frame="true"><figure><img src="/files/50669422d868243642a61668ee1280cdbb329d12" alt="" width="563"><figcaption></figcaption></figure></div>

Assurez-vous d'utiliser des délais lorsque vous spécifiez des conditions de comparaison dans une flèche.

<div data-with-frame="true"><figure><img src="/files/34b2aa5ed057d02649e01f36e70450d5e239cfb3" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Exemple</summary>

`'01.09.2020'`` `*`< '11.10.2020'`*&#x20;

*`'11.10.2020' >=`*` ``current_date`

`current_date == date`

`current_time >= '18:00'`&#x20;

`current_time <= '21:00'`

</details>

### &#x20;Comment définir des intervalles de temps

<details>

<summary>Description</summary>

Une fonction très utile pour travailler avec des intervalles de temps est :

**time\_interval('heure\_de\_début', 'heure\_de\_fin')**

La fonction renvoie un booléen **True** ou **Faux**.

Utilisez cette fonction dans les blocs comme condition dans le champ **"Variable à comparer"** ou dans une calculatrice à l'aide de IF().

{% hint style="info" %}
La fonction permet de vérifier si **l'heure actuelle** se situe dans l'intervalle spécifié.
{% endhint %}

</details>

<details>

<summary>Exemple</summary>

`time_interval('10:00','19:00') - vérifie l'intervalle de temps de 10 h à 19 h`

`time_interval('19:00','07:00') - vérifie l'intervalle de temps de 19 h à 7 h`

`time_interval('18.10.2021 10:00','25.10.2021 23:59:59') - vérifie l'intervalle de temps entre différentes dates`

`time_interval('#{current_date} 10:00','#{date} 19:00') - vérifie l'intervalle de temps défini à l'aide de variables`

Examinons de plus près le premier exemple. La fonction se lit comme suit :

Si l'utilisateur envoie un message contenant le mot "time" pendant la période de 10:00 à 19:00, la condition renvoie vrai ; sinon, elle renvoie faux.

Cela vous permet de créer différentes réponses en fonction de l'heure de la demande du client.\
Par exemple, si l'heure actuelle est comprise entre 10:00 et 19:00, le client recevra :&#x20;***"Un gestionnaire vous répondra bientôt."***

À tout autre moment, il recevra :&#x20;***"Le gestionnaire est actuellement indisponible ; vous recevrez une réponse pendant les heures de travail à partir de 10:00."***

Dans le champ Calculatrice, saisissez :

`response = if(time_interval('10:00','19:00'), "Un gestionnaire vous répondra bientôt", "Le gestionnaire est actuellement indisponible ; vous recevrez une réponse pendant les heures de travail à partir de 10:00")`

Dans le champ "Message", saisissez : `#{response}`

<div data-with-frame="true"><figure><img src="/files/dd4b898f0237d1bc0ae2b786b77670c10e1e382d" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/848abe1d300e3737bee315e2b0c94add6b9c4f88" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Exemple de code à copier</summary>

`response = if(time_interval('10:00','19:00'), "Un gestionnaire vous répondra bientôt", "Le gestionnaire est actuellement indisponible ; vous recevrez une réponse pendant les heures de travail à partir de 10:00")`

</details>

### Comment savoir combien de temps il reste avant le jour D

<details>

<summary>Exemple</summary>

<div data-with-frame="true"><figure><img src="/files/aace4d6c27ca52c584e4a286e370b56044038e9b" alt="" width="563"><figcaption></figcaption></figure></div>

Pour calculer combien de temps il reste avant le jour D :

Définissez la date et l'heure du moment cible jusqu'auquel vous souhaitez effectuer le compte à rebours.

`date_D = 10.10.2021 time_D = 12:00`

Convertissez-le au format **timestamp**  :

`timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")`

Capturez l'heure actuelle en **timestamp** :

`timestamp0 = #{timestamp}`

Arrondissez les valeurs obtenues à des nombres entiers :&#x20;

`timeD = int(#{timestampD}) time0 = int(#{timestamp0})`

Calculez la différence en secondes :

`time = timeD - time0`

Divisez par le nombre de secondes dans une journée et arrondissez le résultat :

`full_days = time/86400`&#x20;

`days = int(#{full_days})`

Calculez combien de secondes restent dans la journée partielle :

`c = days*86400`&#x20;

`d = time - c`

Calculez à combien d'heures cela correspond et arrondissez la valeur :

`e = d/3600 hours = int(e)`

Calculez combien de secondes restent dans les heures partielles :

`g = hours*3600`&#x20;

`h = d - g`

Convertissez cela en minutes et arrondissez la valeur :&#x20;

`i = h/60`&#x20;

`minutes = int(i)`

Calculez combien de secondes restent :

`k = minutes*60`&#x20;

`seconds = h - k`

Et affichez le temps dans le **« Texte du message »**  :

Temps restant avant le début : #{days} jours #{hours} heures #{minutes} minutes et #{seconds} secondes

Voici le code à insérer dans le **« Calculatrice »**  :

```
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
```

<figure><img src="/files/8a00b307c1cb4f3ac8e81467c94ad6bbeb5049e3" alt="" width="563"><figcaption></figcaption></figure>

Le **Calculatrice** prend également en charge la soustraction de dates et d'heures sans conversion de type. Par exemple :

`'11.12.2021' - '8.12.2021' renvoie 3 (jours)`

`'11:12' - '3:45' renvoie 447 (minutes)`

</details>

### Comment trouver le prochain anniversaire &#x20;

<details>

<summary>Description</summary>

Pour que le bot envoie des vœux d'anniversaire, vous pouvez utiliser la fonction :

**birthdate(date)** - renvoie le prochain anniversaire à venir en fonction de la date de naissance de la personne : `reminder = birthdate('28.04.1994')`&#x20;

</details>

### Comment obtenir la date d'un jour de semaine spécifique

<details>

<summary>Description</summary>

Si vous avez des envois récurrents certains jours de la semaine, vous pouvez obtenir la date d'un jour de semaine afin de planifier l'envoi.

**weekday\_date(weekday, b)** - renvoie la date du jour de semaine spécifié le plus proche. Elle prend **deux paramètres**:

**Le premier paramètre est le** numéro du jour de semaine à trouver (de 1 à 7, où 1 = lundi, 7 = dimanche).

**Le deuxième paramètre** indique s'il faut **renvoyer la date d'aujourd'hui si le jour de semaine spécifié est aujourd'hui**. Ce paramètre est facultatif et sa valeur par défaut est False.

Voyons un exemple pour comprendre le fonctionnement du deuxième paramètre :

Vous souhaitez programmer l'envoi d'un message pour jeudi.

Mais que se passe-t-il si le client vient tout juste de s'inscrire un jeudi ?

Le message doit-il être envoyé ce jeudi ou le suivant ?

Le deuxième paramètre défini sur False signifie que le message ne sera envoyé que le jeudi suivant (en sautant aujourd'hui).

Le deuxième paramètre défini sur True signifie que le message sera envoyé ce jeudi, si aujourd'hui est jeudi (y compris le jour de l'inscription).

Dans notre exemple, l'utilisateur s'inscrit le jeudi 13.02.2025, et nous voulons envoyer le message le jeudi suivant.&#x20;Donc, la valeur renvoyée sera "20.02.2025".

Par exemple, `weekday_date(4)` renverra '20.02.2025'.

Si vous souhaitez que le jour actuel ne compte que jusqu'à une certaine heure, vous pouvez utiliser cette construction :

`weekday_date(4, current_time < '13:00')`, où la condition peut être remplacée par n'importe quelle condition dont vous avez besoin.

<mark style="color:green;">**Voici un exemple d'utilisation de la fonction :**</mark>

Exemple d'utilisation de la fonction dans le champ "Date d'envoi" d'une connexion

<div data-with-frame="true"><figure><img src="/files/5620b5da0a25d2003f8ea3d736b326633ff415fd" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

### Comment obtenir la date d'un jour spécifique du mois

<details>

<summary>Description</summary>

Si vous avez des actions récurrentes à un jour spécifique du mois, vous pouvez obtenir la date de l'occurrence la plus proche de ce jour pour planifier votre envoi.

**month\_date(date, b)** - renvoie la date du mois la plus proche pour le numéro de jour spécifié. Elle prend **deux paramètres**:

**date** - numéro du jour du mois à trouver (de 1 à 31)

**b** - paramètre facultatif ; indique s'il faut renvoyer la date d'aujourd'hui si elle correspond au jour spécifié. La valeur par défaut est False.

Si vous indiquez 31 mais que le mois en cours ne compte que 30 jours, la fonction renverra le dernier jour du mois (par exemple le 30).

Par exemple :

Si nous sommes le 05.04.2022 et que vous appelez t = month\_date(1), le résultat sera le 01.05.2022 - le 1er du mois le plus proche après aujourd'hui.

</details>

### Comment vérifier si l'heure actuelle est pendant les heures de travail

<details>

<summary>Description</summary>

Par exemple, l'entreprise travaille de 9 h à 18 h et est fermée les samedis et dimanches. Construisons les vérifications étape par étape :

1. Vérifiez si l'heure est pendant les heures de travail : current\_time >= '9:00' **ET** current\_time <= '18:00'&#x20;
2. Vérifiez si l'heure est en dehors des heures de travail : current\_time < '9:00' **OU** current\_time > '18:00'
3. Vérifiez si aujourd'hui est un jour ouvrable (pas samedi ni dimanche) : weekday != 6 AND weekday != 7
4. Combinez les conditions pour écrire pendant les heures de travail : current\_time >= '9:00' **ET** current\_time <= '18:00' **ET** weekday != 6 **ET** weekday != 7
5. Combinez les conditions pour écrire en dehors des heures de travail : current\_time < '9:00' **OU** current\_time > '18:00' **OU** weekday == 6 **OU** weekday == 7

</details>

<details>

<summary>Exemple</summary>

<div data-with-frame="true"><figure><img src="/files/5ede8f861706aee6ba1cde148608afbecf5f0a52" alt=""><figcaption></figcaption></figure></div>

</details>

### Comment convertir une date et une heure

<details>

<summary>Exemple</summary>

Le format date-heure utilisé varie selon les systèmes, et il est possible que l'une des ressources intégrées renvoie une heure dans un format que MaviBot ne reconnaît pas. Vous devrez la convertir.&#x20;

**convert\_datetime(date, fin, f\_out) -** convertit une date et une heure

Il y a trois paramètres :

* Chaîne de date d'entrée
* Chaîne de format d'entrée
* Chaîne de format de sortie

Exemple : \
`convert_datetime("2011-11-03", "%Y-%m-%d", "%Y/%m/%d") en sortie donnera 2011/11/03`

Cette fonction convertit la date entrante en un **timestamp**.

\#{current\_date} #{current\_time} - convertit en "06.01.2025 11:45" — comme il n'y a aucune information sur les secondes ou les microsecondes, l'horodatage résultant comporte des zéros après la virgule.

Par exemple : 1736144700.000000

Si vous incluez des millisecondes après la virgule,

`convert_datetime("06.01.2025 19:26:35.123456", "%d.%m.%Y %H:%M:%S.%f", "%s.%f")`

le résultat sera : `1736166395.123456`

**get\_datetime(format)** - une fonction pour obtenir l'heure actuelle dans un format spécifique.\
La fonction prend un paramètre — une chaîne qui spécifie le format de sortie souhaité.

{% hint style="info" %} <mark style="color:$primary;">Important !</mark> La réponse de la fonction sera (lundi, mardi, etc.).\
\
Exemple : <mark style="color:orange;">get\_datetime("%A") la sortie sera Wednesday</mark>
{% endhint %}

Description des paramètres de chaîne de format, qui sont spécifiés dans la fonction sous forme de chaînes entre guillemets :

<table data-header-hidden><thead><tr><th width="177.33333333333331">Directive</th><th>Valeur</th><th>Exemple</th></tr></thead><tbody><tr><td><code>%a</code></td><td>Nom abrégé du jour de semaine</td><td>Dim, Lun ...</td></tr><tr><td><code>%A</code></td><td>Nom complet du jour de semaine</td><td>Lundi, mardi, …, dimanche </td></tr><tr><td><code>%w</code></td><td>Jour de la semaine sous forme de nombre décimal, où 0 est dimanche et 6 est samedi</td><td>0, 1, …, 6</td></tr><tr><td><code>%d</code></td><td>Jour du mois sous forme de nombre décimal avec un zéro initial</td><td>01, 02, …, 31</td></tr><tr><td><code>%b</code></td><td>Nom abrégé du mois</td><td>Jan, Fév, …, Déc</td></tr><tr><td><code>%B</code></td><td>Nom complet du mois</td><td>janvier, février, mars, etc.</td></tr><tr><td><code>%m</code></td><td>Mois sous forme de nombre décimal avec un zéro initial</td><td>01, 02, …, 12</td></tr><tr><td><code>%y</code></td><td>Année sous forme de nombre à deux chiffres</td><td>00, 01, …, 99</td></tr><tr><td><code>%Y</code></td><td>Année sous forme de nombre à quatre chiffres</td><td>0001, 0002, …, 2013, 2014, …, 9998, 9999</td></tr><tr><td><code>%H</code></td><td>Heure (format 24 heures) sous forme de nombre à deux chiffres avec un zéro initial</td><td>00, 01, …, 23</td></tr><tr><td><code>%I</code></td><td>Heure (format 12 heures) sous forme de nombre à deux chiffres avec un zéro initial</td><td>01, 02, …, 12</td></tr><tr><td><code>%p</code></td><td>Indicateur AM ou PM</td><td>AM, PM (en_US) ;am, pm (de_DE)</td></tr><tr><td><code>%M</code></td><td>Minutes sous forme de nombre à deux chiffres avec un zéro initial</td><td>00, 01, …, 59</td></tr><tr><td><code>%S</code></td><td>Secondes sous forme de nombre à deux chiffres avec un zéro initial</td><td>00, 01, …, 59</td></tr><tr><td><code>%f</code></td><td>Microsecondes sous forme de nombre à six chiffres avec un zéro initial</td><td>000000, 000001, …, 999999</td></tr><tr><td><code>%z</code></td><td>Décalage UTC sous la forme <code>±HHMM[SS[.ffffff]]</code> (chaîne vide si l'objet est naïf).</td><td>(vide), +0000, -0400, +1030, +063415, -030712.345216</td></tr><tr><td><code>%Z</code></td><td>Nom du fuseau horaire (chaîne vide si l'objet est naïf).</td><td>(vide), UTC, GMT</td></tr><tr><td><code>%j</code></td><td>Jour de l'année sous forme de nombre à trois chiffres avec un zéro initial</td><td>001, 002, …, 366</td></tr><tr><td><code>%U</code></td><td>Numéro de semaine de l'année (avec dimanche comme premier jour de la semaine) sous forme de nombre décimal avec un zéro initial. Tous les jours de la nouvelle année précédant le premier dimanche sont considérés comme semaine zéro.</td><td>00, 01, …, 53</td></tr><tr><td><code>%W</code></td><td>Numéro de semaine de l'année (avec lundi comme premier jour de la semaine) sous forme de nombre décimal. Tous les jours de la nouvelle année précédant le premier lundi sont considérés comme semaine zéro.</td><td>00, 01, …, 53</td></tr><tr><td><code>%%</code></td><td>Symbole <code>'%'</code></td><td>%</td></tr><tr><td><code>%s</code></td><td>timestamp</td><td>1607926200</td></tr></tbody></table>

Tous les autres symboles se représentent eux-mêmes.

{% hint style="info" %}
Vous pouvez obtenir l'horodatage actuel à l'aide de : **convert\_datetime("#{current\_date} #{current\_time}", "%d.%m.%Y %H:%M", "%s")**
{% endhint %}

</details>

### Afficher la date actuelle au format "jj nom du mois"

<details>

<summary>Exemple</summary>

Pour afficher la date au format "jj nom du mois", utilisez la fonction ***current\_date\_eng()***.&#x20;

*Si vous devez ajouter un certain nombre de jours à cette date, vous devez spécifier le nombre de jours requis comme paramètre dans la fonction.*

Par exemple, si la date d'aujourd'hui est le 3 avril, alors la fonction renverra :

current\_date\_eng() - 3 avril

current\_date\_eng(2) - 5 avril

current\_date\_eng(-2) - 1 avril

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/fr/chatbot/functions/calculatrice/date.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
