J’ai un scenario que j’aimerais lancer le soir au couché du soleil, et qui doit me calculer le temps (en secondes ou minutes peut m’importe) restant jusqu’au levé du soleil le lendemain matin.
Pour le moment j’ai cette ligne qui je pense doit bien fonctionner :
anneeDemain, moisDemain jourDemain et heureLeveDemain sont des variables (cf. photo jointe.)
Dans un premier temps, j’aimerais savoir si il n’y à pas un plugin qui gèrerai ça en auto plutôt que d’avoir toute cette lourdeur dans un scenario ?
Et ensuite, pour la variable jourDemain, je ne l’ai pas encore incorporée pour les jours normaux dans le mois car je ne sais pas comment gérer les années bissextiles ? à moins de rajouter un calcul avec time_diff et de vérifier si la différence entre le 28 et 29 février de l’année en cours me donne une valeur cohérente ?!
Merci !
[EDIT] Après vérification, le time_diff ne fonctionne pas…
J’utilise déjà le plugin domogeek pour ce qui est du levé/couché du soleil.
Mais il ne donne pas le temps entre le couché du soleil du jour J et le levé du jour J+1.
Si un plugin le donne en direct, alors je n’aurais plus besoin de savoir si une année est bissextile ou non.
Mais si ce plugin n’existe pas alors un plugin qui dit si une année est bissextile ou non peut m’être utile oui.
Je vais regarder du coté de heliotrope que je ne connais pas encore du coup.
Si durée de la nuit correspond au temps entre le couché du soleil du jour J et le levé du soleil du jour J+1 (ce qui semble logique) alors oui c’est tout à fait ça (si c’est possible de le récupérer en secondes ou minutes c’est encore mieux)
on peut le récupérer dans tout les format que l’on désire …
voila le script
<?php
// nom du script : date-sun-info.php
// 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
// jour
$sun_info = date_sun_info(time(),$latlon[0],$latlon[1]);
// jour +1
$sun_info1 = date_sun_info((time()+ (1 * 24 * 60 * 60)),$latlon[0],$latlon[1]);
// calcul durée du jour
$jour = $sun_info["sunset"]-$sun_info["sunrise"];
// calcul durée de la nuit
$nuit = ($sun_info1["sunrise"]-$sun_info["sunset"]);
$maintenant=time();
//traitement des commandes ne faisant pas partie de date_sun_info
if ($argv[2] == 'jour' ) {echo gmdate("$argv[3]",$jour);exit();}
if ($argv[2] == 'nuit' ) {echo gmdate("$argv[3]",$nuit);exit();}
if ($argv[2] == 'maintenant' ) {echo date("$argv[3]",$maintenant);exit();}
//traitement des commandes faisant partie de date_sun_info
echo date("$argv[3]",$sun_info[$argv[2]]);
// PARAMETRES N°1
// latitude,longitude en décimales ex: 48.12345,2.5678
// PARAMETRES N°2
// sunrise
// sunset
// transit
// civil_twilight_begin
// civil_twilight_end
// nautical_twilight_begin
// nautical_twilight_end
// astronomical_twilight_begin
// astronomical_twilight_end
// jour
// nuit
// PARAMETRES N°3
// type d'affichage
// H:i:s heures:minutes:secondes
// H:i heures:minutes
// Hi heuresminutes
// Gi heuresminutes sans 0 pour les heures
// U timestamp
// tout les paramétres ($format) de la fonction date() php sont utilisable
Ca ne donne pas le temps entre le couché du jour J et le levé du J+1 mais plutôt le temps entre le couché J-1 et le levé du jour J si j’ai bien compris le script ?
On est très loin du titre du sujet …
Disons que je cherche à savoir si une année est bissextile pour calculer la différence de temps entre le couché de aujourd’hui et le levé de demain.
Si aujourd’hui on est le 28 férié et que demain on est le 1er mars, je peu le savoir si je sais qu’on est pas en année bissextile.
Mais si je peux avoir le calcul entre le couché et le levé directement, savoir si on est une année bissextile ou non ne me sers plus à rien ! J’avais pas pensé à cette éventualité en postant le sujet
Si je le décrypte j’ai « $sun_info[« sunset »] » qui est le couché du soleil du jour J, et « $sun_info[« sunrise »] » qui est le levé du soleil du même jour.
Moi j’aimerais avoir la différence entre « $sun_info[« sunset »] » et « $sun_info[« sunriseDemain »] » car je lance mon scenario au couché du soleil du jour J pour qu’au levé du jour suivant, il exécute des actions.
Je sais pas si je suis assez clair
Après c’est sur qu’on peut gruger pour les 4 minutes grand max qu’il peut y avoir entre 2 jours, et garder la valeur de la nuit du jour J même si elle est fausse du coup.
Le sujet me semble avoir largement dévié du titre …
Pour savoir si une année est bissextile, il suffit de la diviser par 4. Si le reste est nul, elle est bissextile. il y a quelques exception (si année divisible par 400 alors elle n’est pas bisextile … mais je pense qu’avant l’an 2400, Jeedom ne sera plus là
scenario à lancer 1x /an au 1er Janvier et résultat oui/non à stocker dans une commande virtuelle ou une variable
Merci à tous.
Au final j’ai fait un script comme ceci :
<?php
// nom du script : date-sun-info.php
// 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
// jour
$sun_info = date_sun_info(time(),$latlon[0],$latlon[1]);
// jour +1
$sun_info1 = date_sun_info((time()+ (1 * 24 * 60 * 60)),$latlon[0],$latlon[1]);
// calcul durée du jour
$jour = $sun_info["sunset"]-$sun_info["sunrise"];
// calcul durée de la nuit
$nuit = ($sun_info1["sunrise"]-$sun_info["sunset"]);
$maintenant=time();
//traitement des commandes ne faisant pas partie de date_sun_info
if ($argv[2] == 'jour' ) {echo gmdate("$argv[3]",$jour);exit();}
if ($argv[2] == 'nuit' ) {echo gmdate("$argv[3]",$nuit);exit();}
if ($argv[2] == 'maintenant' ) {echo date("$argv[3]",$maintenant);exit();}
//traitement des commandes faisant partie de date_sun_info
echo date("$argv[3]",$sun_info[$argv[2]]);
// PARAMETRES N°1
// latitude,longitude en décimales ex: 48.12345,2.5678
// PARAMETRES N°2
// sunrise
// sunset
// transit
// civil_twilight_begin
// civil_twilight_end
// nautical_twilight_begin
// nautical_twilight_end
// astronomical_twilight_begin
// astronomical_twilight_end
// jour
// nuit
// PARAMETRES N°3
// type d'affichage
// H:i:s heures:minutes:secondes
// H:i heures:minutes
// Hi heuresminutes
// Gi heuresminutes sans 0 pour les heures
// U timestamp
// tout les paramétres ($format) de la fonction date() php sont utilisable
Bon du coup j’ai corrigé le miens pour être plus juste
<?php
// nom du script : date-sun-info.php
// 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
// jour
$sun_info = date_sun_info(time(),$latlon[0],$latlon[1]);
// jour +1
$sun_info1 = date_sun_info(time()+ (2 * 24 * 60 * 60),$latlon[0],$latlon[1]);
// calcul durée du jour
$jour = $sun_info["sunset"]-$sun_info["sunrise"];
// calcul durée de la nuit
//$nuit = 24*60*60-($sun_info["sunset"]-$sun_info["sunrise"]);
$nuit = 24*60*60-($sun_info1["sunset"]-$sun_info["sunrise"]);
$maintenant=time();
//traitement des commandes ne faisant pas partie de date_sun_info
if ($argv[2] == 'jour' ) {echo gmdate("$argv[3]",$jour);exit();}
if ($argv[2] == 'nuit' ) {echo gmdate("$argv[3]",$nuit);exit();}
//if ($argv[2] == 'nuit1' ) {echo gmdate("$argv[3]",$nuit1);exit();}
if ($argv[2] == 'maintenant' ) {echo date("$argv[3]",$maintenant);exit();}
//traitement des commandes faisant partie de date_sun_info
echo date("$argv[3]",$sun_info[$argv[2]]);
// PARAMETRES N°1
// latitude,longitude en décimales ex: 48.12345,2.5678
// PARAMETRES N°2
// sunrise
// sunset
// transit
// civil_twilight_begin
// civil_twilight_end
// nautical_twilight_begin
// nautical_twilight_end
// astronomical_twilight_begin
// astronomical_twilight_end
// jour
// nuit
// PARAMETRES N°3
// type d'affichage
// H:i:s heures:minutes:secondes
// H:i heures:minutes
// Hi heuresminutes
// Gi heuresminutes sans 0 pour les heures
// U timestamp
// tout les paramétres ($format) de la fonction date() php sont utilisable
Je me demande si c’est pas car le calcul du jour est calculé par rapport au couche du soleil du jour J et au levé du jour J aussi là où la nuit est calculée par rapport au jour suivant ?! (Toujours pas super clair mes explications ? xD)