Comparer deux dates au format dd/mm/YYYY HH:ii

Hello,
J’essaie de comparer deux dates contenues dans des strings qui ont le format décrit dans le titre, mais je n’y arrive pas :frowning:
J’ai essayé strtotime mais le format doit être anglais (donc mm et dd inversés) , DateTime::format, strftime, mais je m’en sors pas.
Quel serait votre meilleure idée ?
Ça peut être dans un bloc code ou un bloc SI, pour enchaîner des actions selon le résultat de la comparaison.

Bonsoir,

Que voulez vous comme comparaison : >, <, = ?

Salut,

avec chatgpt . A voir si ça répond à ton besoin.

$string1 = '1/06/25 15:30';
$string2 = '2/06/25 09:00';

$date1 = DateTime::createFromFormat('d/m/y H:i', $string1);
$date2 = DateTime::createFromFormat('d/m/y H:i', $string2);

if ($date1 < $date2) {
    $scenario->setLog("date1 est avant date2");
} elseif ($date1 > $date2) {
    $scenario->setLog("date1 est après date2");
} else {
    $scenario->setLog("Les deux dates sont égales");
}

A priori, il suffirait de remplacer le / par des - pour que strtotime fonctionne correctement avec des dates européennes :
Note: Be aware of dates in the m/d/y or d-m-y formats; if the separator is a slash (/), then the American m/d/y is assumed. If the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.

strtotime('strtr('01/06/2025 20:25' , '/' , '-')' )
1 « J'aime »

@bonjour oui je veux comparer si l’une est plus récente que l’autre. Donc inférieure ou égale.

Noodom j’ai testé ce scénario mais $date ne renvoie rien

// Récupérer la valeur de la commande
$cmd = cmd::byString('#[Aucun][doctolib][DrGuigui]#');
$valeur = $cmd->execCmd();
$scenario->setLog('valeur: '.$valeur);

// Convertir la chaîne de caractères en objet DateTime
$date = DateTime::createFromFormat('d/m/y
 H:i', $valeur);
$scenario->setLog('date: '.$date);

Les logs:

[2025-06-01 20:05:14][SCENARIO] -- Début : Scenario lance manuellement.
[2025-06-01 20:05:14][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-06-01 20:05:14][SCENARIO] - Exécution du sous-élément de type [action] : code
[2025-06-01 20:05:14][SCENARIO] Exécution d'un bloc code
[2025-06-01 20:05:14][SCENARIO] valeur: 02/06/2025 10:00
[2025-06-01 20:05:14][SCENARIO] date:
[2025-06-01 20:05:14][SCENARIO] Fin correcte du scénario

Oh merci je vais tester ça !

OK, c’est dû au format de ta date qui a 4 caractères pour l’année et non 2.
Il faut remplacer y par Y pour que ça soit bien interprété :

$date = DateTime::createFromFormat('d/m/Y H:i', $valeur);

Et pour ton log de la date, il faut lui donner un format car $date1 est un objet et non plus une string après la transformation par DateTime::createFromFormat.

$string1 = '01/06/2025 10:00';
$string2 = '02/06/2025 10:30';

$date1 = DateTime::createFromFormat('d/m/Y H:i', $string1);
$date2 = DateTime::createFromFormat('d/m/Y H:i', $string2);

$scenario->setLog("date1 = " . $date1->format('Y-m-d H:i:s'));
$scenario->setLog("date2 = " . $date2->format('Y-m-d H:i:s'));

if ($date1 < $date2) {
    $scenario->setLog("date1 est avant date2");
} elseif ($date1 > $date2) {
    $scenario->setLog("date1 est après date2");
} else {
    $scenario->setLog("Les deux dates sont égales");
}
[2025-06-01 20:46:17][SCENARIO] **-- Début :** Scenario lance manuellement.
[2025-06-01 20:46:17][SCENARIO] - Exécution du sous-élément de type [action] : code 
[2025-06-01 20:46:17][SCENARIO] Exécution d'un bloc code 
[2025-06-01 20:46:17][SCENARIO] date1 = 2025-06-01 10:00:00 
[2025-06-01 20:46:17][SCENARIO] date2 = 2025-06-02 10:30:00 
[2025-06-01 20:46:17][SCENARIO] date1 est avant date2
[2025-06-01 20:46:17][SCENARIO] Fin correcte du scénario
3 « J'aime »

Bingo ça fonctionne mieux comme ça, j’avance :slight_smile:

1 « J'aime »

Bonjour

Pensez bien à cocher le message qui vous a donné la solution.
Cela permet d’aider aussi la communauté à trouver la solution pour cette demande de comparaison de date :slight_smile:
Merci
belle journée à vous

En complément :

$scenario->setLog("tsdate1 ==> " . $date1->getTimestamp());
$scenario->setLog("tsdate2 ==> " . $date2->getTimestamp());
[2025-06-02 12:46:47][SCENARIO] tsdate1 ==> 1748764800
[2025-06-02 12:46:47][SCENARIO] tsdate2 ==> 1748853000
1 « J'aime »

Et sans boc code :joy:

2 « J'aime »

Ah ouais c’est le strtr qui me manquait pour la substitution de caractères !

Mais bon la solution de noodom fonctionne aussi, maintenant je sais plus quoi cocher :smiley: texte en gras

1 « J'aime »

Il y a des gens qui ne sont pas familiarisés avec le codage informatique et qui pourraient trouver trop compliqué de devoir utiliser un bloc code ; ainsi le but est juste de donner une solution pour un scénario Jeedom sans bloc code.

2 « J'aime »

En effet, quand c’est possible je préfère aussi éviter le bloc code quand possible. Mais j’aime bien aussi progresser en programmation :slight_smile:

Bon allez c’est testé et fonctionnel ! Merci à toi !

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