Scenario de vacances

C’est d’actualité !
Je souhaites faire différentes actions avant, pendant, au retour des vacances.
Je me suis penché sur le code PHP suivant :

$DebutVacances$DebutVacances = $scenario->getData('DebutVacances');
$FinVacances = $scenario->getData('FinVacances');

$maintenant=strtotime("now");
$diff= strtotime($FinVacances)-strtotime($DebutVacances);
$diff2=$maintenant-strtotime($DebutVacances);


if ($maintenant<strtotime($DebutVacances)) {
    // "actions avant depart";
}
else {
    if ($diff2<$diff) {
        // "action pendant vacances";
    }
    else {
        // "action vacances finies";
    }
}

Ca marche très bien avec un testeur de PHP mais pas dans un bloc code jeedom ???
Les fonctions strtotime renvoient une erreur
N’étant pas un pro du PHP, pouvez vous m’aider?
merci

Plugin mode avec mode travail/vacances/absence puis ton scénario journalier qui fait les actions en fonction du mode. Et actions dans le plugin mode au changement de mode.
Tu peux ensuite récupérer les vacances scolaires en php ou avec un autre plugin et changer automatiquement de mode.

Hello,
J’suis pas un pro du php, mais ta variable $DebutVacances est doublée en début de ton code ($DebutVacances$DebutVacances).
Donc la fonction strtotime ne peut trouver ta variable :wink:

Mais comme le dit @kiboost, le plugin mode est LARGEMENT plus adapté :wink:

Merci pour vos réponses.
doublage de la variable> c’est une erreur lors du copier/coller dans le forum
mode vacances > mon code est utilisé lors de l’activation du mode vacances. Je demande la date de retour et je realise une simulation de presence jusque là sauf certaines actions prises la veille du retour. Donc il me faut savoir si la date courante est dans l’intervalle entre début et fin de vacances.
Si vous avez une autre soluce que le test de DateDiff je suis preneur.

Il y a le plugin simulateur de présence qui fait tout cela

Sauf erreur, ce plugin ne gere pas la date de retour ce qui m’importe ici. Le reste est déjà opérationnel de mon coté.
Je bute vraiment sur la façon de tester si la date courante est entre ces 2 bornes. Plus tard j’aimerai lier l’agenda pour que cela soit automatisé

Tu as le plugin présence qui gère les vacances avec début et fin et les actions adéquates

Je pense à première vue que le if ($diff2-$diff) pose problème, et je le remplacerai par if ($maintenant<strtotime($FinVacances) il me semble ?

La gestion des dates, c’est jamais simple.$

Elle ressemble à quoi ta string $scenario si tu fais un echo $scenario ?
A tous les coups tu dois avoir un souci de formatage.

Salut, après plusieurs essais j’ai réussi à calculer cette difference. En fait le pb venait qu’un « ’ » restait au début de la variable récupérée par le code PHP. En scindant les morceaux avec la fonction explode puis str_replace sur les ', ",… j’ai récupéré les valeurs des jours, mois et année
Pb clos donc

$tags = $scenario->getTags();
$DebutVacances = $scenario->getData('DebutVacances');
$FinVacances = $scenario->getData('FinVacances');
list($dday, $dmonth, $dyear) = explode('-', $DebutVacances);
list($fday, $fmonth, $fyear) = explode('-', $FinVacances);

$maintenant=strtotime("now");

$tsDebutVacances=mktime(0,0,0,intval($dmonth),intval(str_replace("'","",$dday)),intval($dyear));
$tsFinVacances=mktime(0,0,0,intval($fmonth),intval(str_replace("'","",$fday)),intval($fyear));

$diff=$tsFinVacances - $tsDebutVacances;
$diff2=$maintenant - $tsDebutVacances;

if ($maintenant<$tsDebutVacances) {
  	$tags['#status#'] = 'avant';
}
else {
    if ($diff2<$diff) {
        if (($diff - $diff2) <= 86400) {
          $tags['#status#'] = 'veille';
        }
      else {
      	$tags['#status#'] = 'pendant';
      }
    }
    else {
      	$tags['#status#'] = 'après';
    }
}

$scenario->setTags($tags);
$scenario->setLog(' -> Status '.$tags['#status#']);
1 J'aime

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