je cherche à avoir le dimanche pour le moment, meme si j’aimerais le faire défois plus à l’avance les dates de lundi à vendredi.
A ce jour si je le fait le dimanche ca fonctionne mais si la semaine est sur 2 mois ca ne fonctionne pas car mon sscenario aditionne le jours, et ne revient pas à 1.
Avez vous une solution :
Oui comme @lperenna je comprends pas trop ce que tu veux faire la …
Et oui effectivement il ne faut normalement ne jamais aditionner des jours (ou des heures d’ailleurs) mais utiliser une fonction qui est faite pour ça comme dans son exemple.
Donc en entrée vous donnez un numéro de semaine et de cela vous voulez renseigner la date de chaque jour de cette semaine
Donc dans un bloc code
// Retourne la date du lundi de la semaine $semaine et de l'année $annee
// Dans un format de type DateTime bien sûr
$lundi = new DateTime();
$lundi->setISOdate(2024,40);
$scenario->setLog('Lundi : ' .$lundi->format('d M Y'));
En déduire les autres sera assez simple
Donc on peut imaginer passer l’année et le numéro de semaine en tag au scénario
En sortie passer la date en tag et faire dans la suite du scénario un event et mettre à jour une info virtuel et calculer les autres jours de la semaine.
// Récupération des tags du scénario
$tags = $scenario->getTags();
$annee = $tags['#annee#'];
$semaine = $tags['#semaine#'];
// Logs pour le scénario
$scenario->setLog('Année reçue : ' .$annee);
$scenario->setLog('N° Semaine : ' .$semaine);
// Retourne la date du lundi de la semaine $semaine et de l'année $annee
// Dans un format de type DateTime bien sûr
$lundi = new DateTime();
$lundi->setISOdate($annee, $semaine);
$retour = $lundi->format('d M Y');
$scenario->setLog('Lundi : ' .$retour);
$tags['#tosend#'] = $retour;
// Sauvegarde des tags
$scenario->setTags($tags);
Le log que cela génère
[2024-10-22 08:38:34][SCENARIO] Mise à jour du tag #annee# => 2024
[2024-10-22 08:38:34][SCENARIO] Mise à jour du tag #semaine# => 40
[2024-10-22 08:38:34][SCENARIO] - Exécution du sous-élément de type [action] : code
[2024-10-22 08:38:34][SCENARIO] Exécution d'un bloc code
[2024-10-22 08:38:34][SCENARIO] Année reçue : 2024
[2024-10-22 08:38:34][SCENARIO] N° Semaine : 40
[2024-10-22 08:38:34][SCENARIO] Lundi : 30 Sep 2024
[2024-10-22 08:38:34][SCENARIO] - Exécution du sous-élément de type [action] : action
[2024-10-22 08:38:34][SCENARIO] Ajout du message suivant dans le centre de message : 30 Sep 2024
[2024-10-22 08:38:34][SCENARIO] Fin correcte du scénario
La date calculée est repassé au scénario jeedom dans un tag.
Dans ce que je montre je fais message de ce tag pour l’avoir dans le centre de message, a toi d’adapter et faire event sur une commande virtuelle que tu veux mettre à jour
je ne sais pas quel format de date tu dois avoir, a toi d’adapter également
c’est le format $retour = $lundi->format('Y-m-d');
Year month day. Si M majuscule c le mois en abrégé lettre, minuscules en chiffre etc…
j’ai testé le lundi ca fonctionne avec setcommand pour enregristrer la date dans une cde info/autre.
maintenant en réfléchissant je voudrais mettre du lundi au mardi. j’ai rajouté mardi mais ca met toujours la date de lundi.(pour eviter les problémes se semaine à cheval sur 2 mois)
mais je ne vois pas ou je bute.
// Récupération des tags du scénario
$tags = $scenario->getTags();
$annee = $tags['#annee#'];
$semaine = $tags['#semaine#'];
// Logs pour le scénario
$scenario->setLog('Année reçue : ' .$annee);
$scenario->setLog('N° Semaine : ' .$semaine);
// Retourne la date du lundi de la semaine $semaine et de l'année $annee
// Dans un format de type DateTime bien sûr
$lundi = new DateTime();
$lundi->setISOdate($annee, $semaine);
$retourlundi = $lundi->format('Y-m-d');
$scenario->setLog('Lundi : ' .$retourlundi);
cmd::byString('#[10 TEST EQUIPEMENT][Cde Planning][Date Lundi]#')->event("$retourlundi");
$tags['#tosend#'] = $retourlundi;
// Retourne la date du mardi de la semaine $semaine et de l'année $annee
// Dans un format de type DateTime bien sûr
$mardi = new DateTime();
$mardi->setISOdate($annee, $semaine);
$retourmardi = $mardi->format('Y-m-d');
$scenario->setLog('Mardi : ' .$retourmardi);
cmd::byString('#[10 TEST EQUIPEMENT][Cde Planning][Date Mardi]#')->event("$retourmardi");
$tags['#tosend#'] = $retourmardi;
// Sauvegarde des tags
$scenario->setTags($tags);
[2024-10-24 11:10:34][SCENARIO] -- Début : Scenario lance manuellement.
[2024-10-24 11:10:34][SCENARIO] - Exécution du sous-élément de type [action] : action
[2024-10-24 11:10:34][SCENARIO] Mise à jour du tag #annee# => 2026
[2024-10-24 11:10:34][SCENARIO] Mise à jour du tag #semaine# => 22
[2024-10-24 11:10:34][SCENARIO] Exécution d'un bloc élément : 426
[2024-10-24 11:10:34][SCENARIO] - Exécution du sous-élément de type [action] : code
[2024-10-24 11:10:34][SCENARIO] Exécution d'un bloc code
[2024-10-24 11:10:34][SCENARIO] Année reçue : 2026
[2024-10-24 11:10:34][SCENARIO] N° Semaine : 22
[2024-10-24 11:10:34][SCENARIO] Lundi : 2026-05-25
[2024-10-24 11:10:34][SCENARIO] Mardi : 2026-05-26
[2024-10-24 11:10:34][SCENARIO] Fin correcte du scénario