Je farfouille sans trouver ma réponse…
Je cherche a calculer la différence en minutes entre deux #plugin-wazeintimeLe problème étant que bienevidemment 700 - 659 ne donne pas 1minute mais 41.
Le but étant de stocker l’heure du lever du soleil de la veille, ainsi que le coucher, et les comparer avec ceux du jour, pour calculer le nombre de minutes gagnées ou perdues.
J’ai essayé avec pas mal de formules comme time_diff ou time_op mais rien a faire, je ne trouve pas.
(peut etre qu’un plugin donne l’info, mais pas envie d’installer un plugin « juste » pour ca.)
yes en faite tu converti tes heures en timestamp, tu fait l’opération sur des secondes puis reconverti en heures minutes secondes … ou dans le format que tu a besoin.
Mais j’irais quand même chercher du côté du timestamp et des fonctions php comme suggéré, peut-être plus simple (surtout qu’elles peuvent s’utiliser directement dans les virtuels par exemple).
Temps que l’on en est la pourquoi ne pas inclure directement le sunrise dans la fonction et tant que l’on y est si c’est pour faire comme a la météo dire le temps en plus faire le calcul sur les différence
de temps de jour, qui sont l’addition des différences levés et couchés.
le temps de jour on l’a dans le script donné plus haut
// separation de la latitude et de la longitude
$latlon = explode(",", $argv[1]);
// utilisationde la commande date_sun_info https://www.php.net/manual/fr/function.date-sun-info.php
$sun_info = date_sun_info(time(),$latlon[0],$latlon[1]);
// calcul durée du jour
$jour = $sun_info["sunset"]-$sun_info["sunrise"];
Il suffit juste de faire le même calcul sur la veille et de differencier les 2
Je pourrait écrire toute la solution mais ce serait beaucoup moins jouissif pour celui qui la cherche.
Comme mentionné par @olive, perso, dés qu’il s’agit de temps/durée etc…je passe toujours par des timestamp (en secondes donc) comme ca tu peux faire toutes les opérations d’additions /soustraction intermédiaires que tu veux et aprés je traduit selon mes besoins (selon ton cas, besoin d’une diff en chiffres ,ou pour une vocalisation de durée en heures minutes secondes, etc).
Si ca peut t’aider, fait une variation sur le theme de cette fonction que j’utilise à toute les sauces (ou prend tel quel et extrait les minutes du tableau renvoyé):
/*************************
* Transform des secondes en JOURS HH:MM:SS
* Max 365 J sinon erreur
* renvoi array avec
* [0]= JOURS HH:MM:SS
* [1]= x JOURS H Heures M Minutes S secondes
* pour vocalisation Sarah/snips etc. Les valeurs nulles sont supprimées de la réponse
* 3 minutes 34 Secondes si pas d'heures, etc..
* $DAYS=0 -> que des heures , $DAYS=1 -> Jours affiches SSI non nul, $DAYS=2 -> jours toujours affiches sur 3 digits
*************************/
public static function HourMinSec($Time, $DAYS = 1) {
global $scenario;
$DEBUG = 0;
$Result="";
if ($DAYS == 0) {
$MAX=(24*3600);
} else {
$MAX=(365*24*3600);
}
if (( ($Time > $MAX) ) OR ("$Time" == "" ) ) {
$scenario->setLog("ERROR : Invalid Time value ($Time) max=$MAX sec");
return -1;
} else {
if ($Time == 0 ) {
$RES = array ( "00:00:00", "0 Secondes");
return $RES;
} else {
//$TimeY = floor($Time / (365*24*3600));
$TimeD = floor( ($Time / (24*3600)) );
$TimeH = floor( ($Time / 3600) % 24);
$TimeM = floor( ($Time / 60) % 60) ;
$TimeS = ($Time % 60);
if ($TimeD != 0) { $Result = sprintf("%d Jours",$TimeD); } ;
if ($TimeH != 0) { $Result = $Result.sprintf(" %d Heures",$TimeH); } ;
if ($TimeM != 0) { $Result = $Result.sprintf(" %d Minutes",$TimeM); } ;
if ($TimeS != 0) { $Result = $Result.sprintf(" %d Secondes",$TimeS); } ;
// $res = sprintf ("%02d Years %03d Days %02d:%02d:%02d",$TimeY, $TimeD, $TimeH, $TimeM, $TimeS);
if ($DAYS == 0) {
$ResultShort = sprintf ("%02d:%02d:%02d", $TimeH, $TimeM, $TimeS);
} else {
if (($TimeD != 0) || ($DAYS == 2)) {
$ResultShort = sprintf ("%03dJ %02d:%02d:%02d", $TimeD, $TimeH, $TimeM, $TimeS);
} else {
$ResultShort = sprintf ("%02d:%02d:%02d", $TimeH, $TimeM, $TimeS);
}
}
if ($DEBUG == 1) { $scenario->setLog("$ResultShort - $Result"); };
$RES = array ( "$ResultShort", "$Result");
return $RES;
}
};
} // END Function