Calculer le jour du lendemain

Voilà avec un 2 listes dans un virtuel je vais créer des événements. La première j’ai le choix entre Aujourd’hui et Demain. La seconde entre AM ou PM.

Au final le scénario va utiliser l’action « Ajouter une date » pour un événement donné du plugin Agenda.

Il faut savoir que ce champ attend un string écrit exactement comme cela: AAAA-MM-JJ

Pour Aujourd’hui c’est facile. #annee#-mois#-#jour#

C’est pour Demain que cela se corse. Pour année et mois évidemment pas de problème. Mais pour le calcul du lendemain, il semble (je suis débutant) que se soit une usine à gaz. J’ai d’abord tenté ma chance avec #jour# + 1 et des variantes autour de cela.

Finalement j’ai trouvé cette fonction time_op(#jour#, 1). Problème, elle ne me renvoit pas 17 (on est le 16) mais 017. J’ai donc écrit ltrim(time_op(#jour#, 1)) et ca marche …

… Sauf qu’en début du mois prochain je vais me retrouver avec un seul digit (1, 2, 3,etc). Je ne vais tout de même pas faire un fonction spéciale pour cela (d’autant plus que sorti de visual basic je suis out) en php? il doit y avoir plus simple tout de même?

Merci

Bon je viens de tester substr(time_op(#jour#, 1),-2)
et c’est correct.

Y a mieux?

il faut travailler avec des timestamp, timestamp est un nombre exprimé en secondes depuis une date de référence que l’ont peut convertir selon plein de format disponible…
exemple si l’on prend la date du jour soit un nombre de secondes et que l’on veut le jour suivant, on ajoute (24 * 60 * 60) on converti le tout avec une fonction date(« format »,timestamp);et le tour est jouer
pour les format possible je te laisse regarder la documentation de la fonction date php
https://www.php.net/manual/fr/function.date.php
n’hésite pas a poser des questions si tu est perdu :wink:

Gros merci :slight_smile:

Quelque chose du genre.

date('Y-m-d',strtotime("+1 day"))

Ton truc me renvoie 2002 (non je n’ai pas interverti 0 et 2) dans l’évaluateur d’expression

Je viens d’essayer aussi date(‹ YYYY-mm-dd ›, strtotime(" +1 day"))

Mais la c’est du n’importe quoi qui sort

Je sais que je suis presque hors sujet mais je pose la question quand même:

Quelle que soit la façon d’arriver au résultat plus haut, il serait bien d’intégrer le résultat à une variable de façon ensuite de pouvoir écrire:

#annee#-#mois#-#MaVariablePourDemain"

J’ai essayé cela mais cela me renvoit litéralement #MaVariablePourDemain"

Je suis un peu perdu par rapport à ma façon habituelle de jouer avec des variables dans d’autres langages. C’est quoi que je n’ai pas compris?

pour utiliser une variable dans jeedom il faut ecrire

variable(lenom) toi tu as juste mis lenom !!

1 « J'aime »

Ce n’est pas n’importe quoi, c’est vous qui demandez un format inapproprié. Voir le paramètre format dans la commande date dans le lien fourni par @olive au dessus.

Pour 2002 hier ou 2001 aujourd’hui, c’est le résultat du calcul 2020 -1 -18
image
Si vous voulez un texte il ne faut pas mettre de signe permettant un calcul:
Exemple avec ‹ Y m d › pour le format dans la commande date:
image

1 « J'aime »

c’est juste un effet de bord indésirable du testeur d’expression
en encadrant l’expression de "

« date(‹ Y-m-d ›,strtotime( »+1 day"))"

on arrive au résultat recherché:

Je vais évaluer : "2020-01-18"
Résultat : 2020-01-18

1 « J'aime »

Non, cela fonctionne très bien dans un bloc code et ce n’est pas un format inapproprié, il peut choisir le format qu’il veut.
Je dirai que c’est plutôt le « testeur d’expression » qui ne sait pas ou il doit s’arrêter.

$maVar = date('Y-m-d',strtotime("+1 day"));
$scenario->setLog('Valeur : ' . $maVar);
[2020-01-17 09:05:08][SCENARIO] Valeur : 2020-01-18

Je clarifie ma réponse. YYYY-mm-dd est inapproprié pour ce qu’il veut faire

Citation
Bon je viens de tester substr(time_op(#jour#, 1),-2)
et c’est correct.

Pas sur que ce soit correct le denier jour du mois 31/01 → 32/01 au lieu de 01/02

Super!
Je me lève (décalage horaire oblige) et je trouve toutes ces réponses très intéressantes. Je vais adapter ce que j’ai fait.

Est-ce qu’il y a dans jeedom des notions de variables locales et globales?

Hello , j’ai la solution ultime avec cette fonction PHP que j’ai ajouté comme indiqué dans la doc des scénario :

# 6) Ajout de fonction php
 
**IMPORTANT**



 L’ajout de fonction PHP est reservé aux utilisateurs avancés. La moindre erreur peut faire planter votre Jeedom

## 6.1) Mise en place

Aller dans la configuration de Jeedom, puis OS/DB et lancer l’éditeur de fichier.

Allez dans le dossier data puis php et cliquez sur le fichier user.function.class.php.

C’est dans cette class que vous devez ajouter vos fonctions, vous y trouverez un exemple de fonction basique.

**IMPORTANT**

 Si vous avez un soucis vous pouvez toujours revenir au fichier d’origine en copier le contenu de user.function.class.sample.php dans user.function.class.php

Voilà le fichier tel que je l’ai modifié :

<?php

/* This file is part of Jeedom.
 *
 * Jeedom is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Jeedom is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
 */

/* * ***************************Includes********************************* */
require_once __DIR__ . '/../../core/php/core.inc.php';

class userFunction {

	public static function plop($_arg1 = '') {
		return 'Argument 1 : ' . $_arg1;
	}
  
  	public static function demain($arg = '') {
      	return date('Y-m-d',strtotime('tomorrow'));
    }
                    
}

Après ça il suffit d’utiliser demain() dans les sénarios ou autre calculs.

Des fonctions personnelles, j’en ai créé pas mal en vba, par exemple, pour Excel ou Access. C’est effectivement l’idéal quand on n’a pas de fonction clé en main. Au moment où j’ai créé ce sujet, j’étais un gros gros débutant avec Jeedom. Donc très frileux d’exploiter ce genre de piste au départ. Je suis depuis bien plus à l’aise … mais probablement pas encore tout à fait prêt pour aller moi-même faire l’équivalent (pourtant simple) à ce niveau.

Mais non seulement, je retiens ta solution, mais en plus je retiens où on peut donc aller se créer ses fonctions. Merci :grin: