Savoir si une année est bissextile ou non?

Bonjour tout le monde et bonnes fêtes !

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 :

time_diff(#annee#-#mois#-#jour# #heure#:#minute#:#seconde#, anneeDemain-moisDemain-jourDemain heureLeveDemain:00,s)

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…

Bonjour,

Probablement, mais encore faut-il savoir ce que vous voulez exactement?
Juste savoir si une année est bissextile ou le temps jusqu’au lever du soleil?

Regardez le plugin-heliotrope qui donne beaucoup d’information, notamment les heures de levers du soleil (et du coucher)
image

Sachant cela ainsi que l’heure actuelle, il est facile de calculer le delta.

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.

Merci à vous :slight_smile:

Hello
Avec un bloc code, en PHP tu peux t’inspirer de :

    function est_bissextile($annee)
    {
        return date("m-d", strtotime("$annee-02-29")) == "02-29";
    }
1 « J'aime »

Bonjour,
La il va falloir un peut de code pour le calcul
c’est cela que vous voulez ?

Bonjour.

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

et voilà des exemples de récupération des données

le dernier élément étant le format d’affichage libre a vous de le changer …

On est très loin du titre du sujet …

1 « J'aime »

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 :confused:

Ben si durée de la nuit …

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 :sweat_smile:

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.

a vous de voir le script est suffisamment clair
pour que vous puissiez faire ce que vous voulez et y ajouter un calcul différent.

Bonjour,

J’ai un scénario qui annonce l’heure du prochain lever du soleil :

str_replace(":","h",date_sunrise(#timestamp#+86400 ,1, #[Localisation][Localisation maison][Coordonnées]#, 90+35/60, date("Z",#timestamp#)/3600))
1 « J'aime »

dans mon script il suffit d’ajouter le décalage voulu

$sun_info = date_sun_info(time(),$latlon[0],$latlon[1]);
pour jour +1 par exemple
$sun_info1 = date_sun_info(time()+ (1 * 24 * 60 * 60),$latlon[0],$latlon[1]);

$nuit1 = 24*60*60-($sun_info1["sunset"]-$sun_info["sunrise"]);

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à :roll_eyes:
scenario à lancer 1x /an au 1er Janvier et résultat oui/non à stocker dans une commande virtuelle ou une variable

2 « J'aime »

Grichka non plus :angel:

4 « J'aime »

Pour répondre au sujet
dans date_format il y a :
L Est ce que l’année est bissextile 1 si bissextile, 0 sinon.

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

1 « J'aime »

Je répète ce que j’ai dit en début de post :

en renseignant $annee avec l’année en cours, on a la réponse.

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

avec un appel comme ceci :

/var/www/html/plugins/script/data/test.php variable(localisation) nuit1s

ça a l’air de bien fonctionner et du coup théoriquement on s’en fout qu’on soit en année bissextile ou non.

Bonne journée.

1 « J'aime »

Bon du coup j’ai corrigé le miens pour être plus juste :wink:

<?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

et donc jour + nuit ne fait pas 24 heures :thinking: :rofl:

La différence est grande ?

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)