Scénario qui test une date - 10 jours

Bonjour,

Je tente de créer un scénario qui m’enverrait une notification via JeedomConnect lorsqu’une date précise sous ce format : 24/04/2025 à 17:59:15 sera inférieur à 10 jours.

J’ai tenté avec du php, strotime, des substr pour reformater et faire le calcul en format timestamp mais je n’y arrive pas… si vous auriez une idée pour réaliser cela ?

Merci

Bonjour,

Vous pouvez partir sur une expression comme celle-ci par exemple :

date('Y-m-d Hms', strtotime('-10 day'))

Bonjour

Dans un bloc code

$madate = ben la date de ton choix;
$currentDate = new DateTime(date('Y-m-d'));
$interval = $madate->diff($currentDate);

$interval donnera un nombre a toi de le tester

Bonsoir,
Pourquoi ne pas utiliser le plugin « Pense-bête » (Remindme) ?

Je précise une chose, la date (qui change plusieurs fois dans l’année) je la récupère dans une commande Info exactement sous ce format :
24/04/2025 à 17:59:15

Après avec un format de ce type qui est fixe, tu peux le convertir en timestamp, puis récupérer le timestamp actuel, soustraire l’un à l’autre et déclencher si la différence entre les deux est inférieure à 60 x 60 x 24 x 10

Ci-dessous, la conversion de votre date en timestamp dans un scénario :

$date = "24/04/2025 à 17:59:15";
$val = date_parse_from_format("d/m/Y à H:i:s", $date);
$ts = mktime($val['hour'],$val['minute'],$val['second'],$val['month'],$val['day'],$val['year']);
$scenario->setLog(date('Y-m-d H:i:s',$ts));

Résultat dans $ts

Pour connaitre la différence de temps entre 2 dates, vous avez la fonction
scenarioExpression::time_diff

  • Résultat en jours, heures, minutes secondes. le résultat est toujours positif.
$scenario->setLog(scenarioExpression::time_diff(date('c'),date('c',$ts),"dhms"));

image

  • Résultat en jours décimaux avec 2 décimales: L’ordre des arguments peut donner un nombre négatif.
$scenario->setLog(scenarioExpression::time_diff(date('c'),date('c',$ts),"df",2));
$scenario->setLog(scenarioExpression::time_diff(date('c',$ts),date('c'),"df",2));

image

Bonjour,

Merci pour ta solution.
J’ai mis en place avec tes recommandations, il me reste une chose c’est écrire la valeur de différence de jours dans le Tag : DifferenceJours (je sais le faire dans une variable avec setData et cela fonctionne mais pas avec le Tag);

$tags=$scenario->getTags(); // récupération des tag du scénario
$Certif_DateFormat =$tags['#DateCertificatSSL#'];

#Convertion de la date du Certificat SSL au format Timestamp pour calculer
$date = $Certif_DateFormat;
$val = date_parse_from_format("d/m/Y à H:i:s", $date);
$DateCertificatSSLTimestamp = mktime($val['hour'],$val['minute'],$val['second'],$val['month'],$val['day'],$val['year']);
$scenario->setLog(date('Y-m-d H:i:s',$DateCertificatSSLTimestamps));

#Connaitre la différence de temps entre 2 dates
#$scenario->setLog(scenarioExpression::time_diff(date('c'),date('c',$DateCertificatSSLTimestamp),"df",0));  // Écrit un message dans le log du scénario
$DifferenceJours = scenarioExpression::time_diff(date('c'),date('c',$DateCertificatSSLTimestamp),"df",0);

$scenario->setTags("DifferenceJours", $DifferenceJours);
$scenario->setLog('Nombre de jours : ' . $DifferenceJours);
$scenario->setTags($tags); // écriture des tags dans le scénario

Et après je fais ma condition pour être notifié :

image

Bonjour,

A la place de

#$scenario->setLog(scenarioExpression::time_diff(date('c'),date('c',$DateCertificatSSLTimestamp),"df",0));  // Écrit un message dans le log du scénario
$DifferenceJours = scenarioExpression::time_diff(date('c'),date('c',$DateCertificatSSLTimestamp),"df",0);

Il est préférable d’écrire:

$DifferenceJours = scenarioExpression::time_diff(date('c'),date('c',$DateCertificatSSLTimestamp),"df",0);
#$scenario->setLog($DifferenceJours);  // Écrit un message dans le log du scénario

Ca ne fait qu’une seule fois le calcul et ça l’écrit ( ou pas si en commentaire ) dans le log

Pour le tag

$tags['#DifferenceJours#'] = $DifferenceJours;

$scenario->setTags($tags);

Votre récup dans le Si est presque correcte. C’est un nombre:
image

J’avais doublé le calcul c’était pour voir le résultat dans la log du scénario.
Du coup j’ai fait ça à la place, pour calculer et afficher dans la log du scénario :

$scenario->setLog($DifferenceJours = scenarioExpression::time_diff(date('c'),date('c',$DateCertificatSSLTimestamp),"df",0));

Ah oui niquel ça fonctionne merci :slight_smile:

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.