Opération sur date

Bonsoir tout le monde et bonne année :slight_smile:

je cale sur un truc tout bête (je pense)
j’ai une date YYYY-MM-DD HH:MM:SS
dans l’info d’un virtuel

et je souhaite dans une autre info retirer un jour à cette date et l’afficher en DD/MM/YYYY

J’ai tout retourné et chatgpt est à côté pour l’application dans un virtuel

Merci d’avance

Hello,

Réponse de ChatGPT

Bonne année à toi aussi :slightly_smiling_face:

Dans Jeedom, le virtuel ne supporte pas tout PHP directement, mais tu peux utiliser les fonctions date() et strtotime() dans les formules.

Cas de départ

Info source :
YYYY-MM-DD HH:MM:SS
(ex : 2026-01-01 14:30:00)

Objectif :
➜ retirer 1 jour
➜ afficher en DD/MM/YYYY

:white_check_mark: Formule à mettre dans l’info du virtuel
date('d/m/Y', strtotime(#ID_INFO_SOURCE#.' -1 day'))

:point_right: Remplace #ID_INFO_SOURCE# par la commande info qui contient ta date.

Exemple concret

Si ton info contient :

2026-01-01 14:30:00

Résultat affiché :

31/12/2025

Variante (si jamais la date est parfois vide)

Pour éviter une erreur :

#[Objet][Virtuel][Info]# != "" ? date('d/m/Y', strtotime(#[Objet][Virtuel][Info]#.' -1 day')) : ""

Points importants

Le -1 day fonctionne parfaitement avec strtotime

L’heure (HH:MM:SS) n’a aucune incidence

Compatible virtuel Jeedom :heavy_check_mark:

Si tu veux :

retirer X jours

gérer un timestamp

ou formater autrement (jour de la semaine, etc.)

dis-moi :+1:

énorme merci pour ton temps.

mais ça ne fonctionne. pas :
date(‹ d/m/Y ›, strtotime(#[Maison][MAX PRIX JOUR MAX GLOBAL][TEST2]#’ -1 day’))
me retourne vide

la valeur de #[Maison][MAX PRIX JOUR MAX GLOBAL][TEST2]# est 2025-12-31 19:14:58

et le type est bien sur autre (pas binaire, ni numérique)

sinon juste convertir : 2025-12-31 19:14:58 en 31-12-2025 m’irait aussi car j’ai réussi à soustraire 1 jour mais le format n’est pas en format french

bsr,
Test ok avec le testeur d’expression :

date('d m Y', strtotime('2025-12-31 19:14:58 -1 day')) 

PS: le testeur d’expression n’aime pas ‹ d-m-Y › donc j’ai enlevé les tirets pour tester

Par contre , pour remplacer la date et l’heure en dure par le résultat de #[Maison][MAX PRIX JOUR MAX GLOBAL][TEST2]#, je n’ai pas trouvé d’autres solutions que de passer par un scenario avec un bloc code :

$cmd = cmd::byString('#[Maison][MAX PRIX JOUR MAX GLOBAL][TEST2]#')->execCmd();
$dateModifiee = date('d-m-Y', strtotime($cmd . ' -1 day'));
$scenario->setLog('Nouvelle date (J-1) : ' . $dateModifiee);

merci bcp
comme je ne peux le calculer direct d’un virtuel, j’ai contourné en sauvegardant la date de la veille en variable et en récupérant cette variable si le scenario confirme que la conso de la veille dépasse la conso max sauvegardée également dans un virtuel.

Merci bcp pour ton aide

@fleproust salut et bonne année.
j’avais tenté de me faire un virtuel pour gérer le mode vacances avec des calculs de dates.

si cela peut t’aider

merci bcp

mais je ne comprends pas car

date('d/m/Y', strtotime('+ 1days') 

dans un virtuel me donne 0.0014807502467917

je suis bien sur « autre »

je ne comprends pas

j’ai trouvé !!! :slight_smile:

date('d m Y', strtotime('- 1days')

il faut pas mettre les slashs

1 « J'aime »

Salut,

A toute fin utile si tu veux conserver tes « / » il faut entourer l’expression de guillemets pour que les « / » ne soit pas considérés comme des divisions entre les nombres :slight_smile:

"date('d/m/Y', strtotime('+ 1days')"

Génial, Merci Bison :wink:

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