Expression pour convertir HH:MM en Minutes

Hello a tous, une bonne ame aurait la solution ( un topic avait été ouvert avec le meme sujet mais pas repondu car la solution avait été trouvée autrement. )
J’ai besoin de convertir une valeur hh:mm en minutes dans un scenario.

Le but est de repartir le temps de flocculation / sterilisation 1/3 - 2/3 de la piscine par rapport au temps de filtration qui est variable ( et déterminé par le plugin piscine en fonction de la température de l’eau )

MErci d’avance

formatTime(#time#)/ xxxxx

Bonsoir

A toi d’ajuster la sortie avec le tag
dans une commande event par exemple
Bonne soirée

1 « J'aime »

Bonjour,

Une autre solution :

date('h',strtotime('9:21'))*60+date('i',strtotime('9:21'))

Tu as le choix :wink:

1 « J'aime »

date('h',strtotime('#time#'))*60+date('i',strtotime('#time#'))
Peux-tu mettre l heure en 24h

Bon trouvé simplement remplacé ‘h’ par ‘H’
J y connais rien en code malheureusement mais c est génial…:+1:t2:

Merci a tous !

https://www.php.net/manual/fr/datetime.format.php

2 « J'aime »

@tomdom j’abuse si je te demande comment arrondir proprement le résultat ?

Pour info j’utilise la formule comme il suit

(date('h',strtotime('9:21'))*60+date('i',strtotime('9:21'))/3)

pour avoir le tiers de la durée en question.
Soucis, j’obtiens des résultats non ronds .

round((date('h',strtotime('9:21'))*60+date('i',strtotime('9:21'))/3))

Lorsque j’utilise la fonction Round( L’expression ) j’ai un résultat simplement faux…
J’ai vu qu’il y avait un débat en cours la dessus mais étant plus graphiste que Dev ca me dépasse un peu.

Bonsoir,

un petit tour dans le manuel :wink:

https://www.php.net/manual/fr/function.round.php

bonne soirée

J’ai fait un tour sur le manuel mais je n’arrive pas a saisir pourquoi le résultat est faux… j’ai surement pas les bases
La syntaxe de la fonction me semble bonne « round(num,0) » donne un bon résultat. J’ai a mon avis un problème avec mes parenthèses… si quelqu’un a la solution j’aime apprendre :
voici la formule

(date('h',strtotime('01:30'))*60)+date('i',strtotime('01:30')

résultat, comme attendu : 90 ( minutes )
maintenant j’ai besoin du tiers de cette valeur

(((date('h',strtotime('01:30'))*60)+date('i',strtotime('01:30')))/3)

La encore pas de soucis, les resultat est bon 30 (minutes)
mais lorsque j’applique un arrondi car la division ne tombe pas forcément juste comme ici , ca foire lamentablement

round((((date('h',strtotime('01:30'))*60)+date('i',strtotime('01:30')))/3),0)

Resultat 70 :roll_eyes:
Je suis persuadé que c’est une question de syntaxe du fait que je n’ai aucune base en dev et que j’étais, au grand dam de ma mere, nul en math. :wink:

pas taper la tete, merci merci merci

Ton expression est parfaitement correcte comme tu pourras le constater en la mettant comme ça dans un bloc code :

$scenario->setLog( round((((date('h',strtotime('01:30'))*60)+date('i',strtotime('01:30')))/3),0) );

Le vérificateur d’expression Jeedom ainsi que les évaluations faites par le core des expressions complexes laissent … souvent à désirer. Le problème est connu depuis fort longtemps.

Moralité :

  • pour tester une expression : LE BLOC CODE,
  • pour utiliser des expressions un poil complexe : LE BLOC CODE
4 « J'aime »

Ok, je me rassure qu’à moitié du coup : Maintenant je dois me familiariser avec le bloc code… Comment l’utiliser dans mon cas ?
le résultat de l’opération ci-dessus doit être incorporé dans une bloc « dans ».

J’imagine que le bloc code doit être placé en amont du scenario, et qu’il doit effectuer l’opération et définir le résultat comme une variable qui sera utilisée dans le bloc DANS par la suite ( peut-on utiliser le bloc DANS avec une variable ?!?) … Je suis bon jusque la ?

Bonjour,

Comme ça :

Le bloc code :

$temps=$scenario->getTags()['#temps#'];
$tags['#temps#']=round(((date('G',strtotime($temps))*60+date('i',strtotime($temps)))/3),0);
$scenario->setTags($tags);
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.