Avoir la date de jour #day# +1 (du lundi au vendredi) - Probléme fin de mois si semaine sur 2 mois

Bonjour à tous,

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 :

C’est lié au plugin plugin-remindme pour créer des taches par semaines mais pas toutes les semaines.

Le must ca serait de pouvoir via scenario mettre les dates des jours dans un virtuel ou variable comme je l’ai fait en fonction du numéro de semaine

C’est lié à ce sujet :

Merci pour vos idées.
Bonne fin de journée

chaque jour ne revient-il pas tous les 7 jours ?

date(‘d-m-Y’, strtotime(‘+7’)); si executée un lundi donnera le lundi suivant !

et ainsi pour chaque jour de la semaine non

oui je comprends mais je voudrais le faire à l’avance.

C’est a dire creer des taches recurente mais pas toutes les semaine.si je suis en vacances par exemple je ne veux pas que ca se crée

ben +7 +14 +21 +28

enfin je comprends pas bien le besoin et encore moins le scénario que vous montrez.

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.

En faite :
Je souhaiterais via scénario

En fonction du numéro de semaine
Inscrire la date du lundi
Mardi
Mercredi
Jeudi et vendredi dans un virtuel ou variable

Par exemple

Semaine 44
Virtuel lundi : 2024-10-28
Virtuel mardi : 2024-10-29

Ou semaine 52
Virtuel lundi : 2024-10-23

Vous pouvez avoir le format attendu par la commande « Ajouter une tache » directement.


Le log de l’exécution:
image

Ca fonctionne aussi directement dans une commande d’un virtuel:

Ou plutot comme ca pour avoir la semaine prochaine:

Tout est dans l’instruction php strtotime et son argument $datetime

2 « J'aime »

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.

Voilà l’exemple de scénario

Le code

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

Merci pour ton aide
J’essaye de comprendre le code ( dont je maîtrise pas)

2 point que je l’assimile pas :

  • le formatage de la date est pas comme le veut le plugin #remindme.
  • la valeur du lundi ne s’enregistre pas dans un virtuel ? Ou je ne vous pas bien .

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…

Ok je comprends
Je regarde ça demain soir :slight_smile:
Merci beaucoup

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

Bonjour,

ce n’est pas en créant une variable mardi que ca va renseigner mardi lol
la variable peut s’appeler toto à la place de $lundi ca renverra le lundi

c’est la commande php setISOdate qui fait le job et qu’il faut comprendre !

The arguments are year, week, dayofweek. PHP’s week starts on Monday, and week 1 of a year is the first week that has at least 4 days in January.

Donc sans préciser le jour ça renvoit lundi donc si vous voulez un autre jour il faut mettre le 3eme paramètre dayofweek

$lundi->setISOdate($annee, $semaine); ou $lundi->setISOdate($annee, $semaine, 1)
$mardi->setISOdate($annee, $semaine, 2);
'$mercredi->setISOdate($annee, $semaine, 3)

etc…

Donc les jours sont de 1 à 7
Donc vous pouvez le mettre en variable et le passer en tag pour en faire un scénario générique

Si vous mettez a jour directement depuis le code, ces commandes ne sont pas nécessaires alors

$tags['#tosend#'] = $retourmardi;

// Sauvegarde des tags
$scenario->setTags($tags);

j’ai fait en regardant sur le net.
ca fonctionne

$lundi->setISOdate($annee, $semaine,$dayofweek=1);
$mardi->setISOdate($annee, $semaine,$dayofweek=2);
[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

Merci a toi

Merci de cocher la solution afin de cloturer ce post pour les suivants

Merci pour ton aide.

1 « J'aime »

ce n’est pas le post qui a donné la solution a ton souci que tu as coché

oui oui j’ai fourhcé de post :slight_smile:

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