[RESOLU] l heure du lever et coucher du soleil ne sont pas correct

Mammouth du PHP | 506 Messages

14 avr. 2021, 14:38

bonjour a tous
j essaye d afficher sur mon site
l heure du lever et du coucher du soleil

j ai donc trouve un exemple de code , mais l heure retournée n est pas vraiment exacte et je pense que je dois changer la valeur du zenith
mais ou trouver cette valeur ...

Code : Tout sélectionner

<?php //Calculate the sunrise time for Lisbon, Portugal //Latitude: 38.4 North //Longitude: 9 West //Zenith ~= 90 //offset: +1 GMT echo("<h2>Brussels, Belgium</h2>"); echo("Date: " . date("D M d Y")); echo("<br>Sunrise time: "); echo(date_sunrise(time(),SUNFUNCS_RET_STRING,50.8,4.3,90 ,2)); echo("<br>Sunset time: "); echo(date_sunset(time(),SUNFUNCS_RET_STRING,50.8,4.3,90,2)); ?>

Mammouth du PHP | 2703 Messages

14 avr. 2021, 15:12


Mammouth du PHP | 506 Messages

14 avr. 2021, 15:19

merci pour le lien
mais le résultat retourné est pareil que celui de mon code
l heure n est pasvraiment la bonne

Code : Tout sélectionner

echo 'Le '.date("M d Y"). ', levé du soleil à : ' .date_sunrise(time(), SUNFUNCS_RET_STRING, 50.8, 4.3, 90, 2); echo date("D M d Y"). ', sunrise time : ' .date_sunrise(time(), SUNFUNCS_RET_STRING, 50.8, 4.3, 90, 2);

Avatar du membre
Mammouth du PHP | 1609 Messages

15 avr. 2021, 15:17

Salut, à priori je dirai que si l'heure n'est pas la bonne c'est qu'il doit y avoir un problème avec un ou plusieurs des 4 derniers paramètres.
Développeur web depuis + de 20 ans

Mammouth du PHP | 506 Messages

15 avr. 2021, 16:06

salan bonjour
oui en effet et apparemment ce sont des paramètres qui évolue suivant les jours

Avatar du membre
Mammouth du PHP | 1609 Messages

15 avr. 2021, 16:10

A priori non ils ne devraient pas évoluer en fonction de la journée. La latitude et la longitude c'est pour savoir à quel endroit du globe, le zenith c'est pour savoir quel moment du levé où du couché et l'utc offset pour savoir sur quel fuseau.

PS : testé avec la latitude et la longitude de ma ville et les résultats sont bons avec zenith de 90.5 et utc offset de 2 (fuseau français actuel avec le décalage horaire de 2h).

PPS : en fait y a le zenith où je suis pas très sûr de la valeur à utiliser...

PPPS : alors pour le zenith la doc dit :
90°50' Levé du soleil: le point où le soleil devient visible.
90°50' Coucher du soleil: Le point où le soleil devient invisible.

Quand on est pas sur un degré pile, le degré est décomposé en minutes puis secondes. La on a donc 90 degrés et 50 minutes.
Pour convertir les minutes en degré, à priori il suffit de faire minutes / 60 que tu peux ajouter aux degrés.
Ainsi 90°50' donnera 90.833333333333° et tu peux donc mettre zenith = 90.833333333333.
Le zenith a un réel impact sur le résultat il faut donc trouver le bon. J'ai cru comprendre qu'il varie selon l'altitude (forcément l'angle de disparition du soleil à l'horizon change selon l'altitude).
A titre informatif, par défaut, sur sa fonction date_sun_info, php utilise un zenith de 90°35' (90.583333333333°) et j'ai un résultat à priori plus juste avec ce zenith (je suis tout près de l'océan donc altitude pas loin de 0).
Développeur web depuis + de 20 ans

Mammouth du PHP | 506 Messages

16 avr. 2021, 07:49

bonjour
un super très grand merci pour cette aide et cette explication et surtout cette recherche
qui vient de m expliquer clairement comment tout cela fonctionne
pour Bruxelles en belgique
je viens de modifier mon code de cette façon et apparemment pour ce jour du moins les valeurs sont exactes

a présent si je voudrais afficher le lever du soleil pour le12-12-2021 je ferais comment ?

Code : Tout sélectionner

<?php //Calculate the sunrise time forBrussels, Belgium //Latitude: 38.4 North //Longitude: 9 West //Zenith ~= 90 //offset: +2 GMT echo("<h2>Brussels, Belgium</h2>"); echo("Date: " . date("D M d Y")); echo("<br>Sunrise time: "); echo(date_sunrise(time(),SUNFUNCS_RET_STRING,50.8,4.3,90.35,2)); echo("<br>Sunset time: "); echo(date_sunset(time(),SUNFUNCS_RET_STRING,50.8,4.3,90.65,2)); ?>

Avatar du membre
Mammouth du PHP | 1609 Messages

16 avr. 2021, 11:01

Je me suis fait ça :
<?php

/* init */
$latitude = 43.480512;
$longitude = -1.527791;
$zenith = [ 90, 34 ];// pour 90°34' (90 degrés et 34 minutes) le zenith qui fonctionne comme il faut chez moi converti en $zenithFloat plus bas. Utilisé pour levé et couché avec date_sunrise et  date_sunset.
$utc = 2;// pour la france avec le décalage horaire actuel
$date = new DateTime();// un date time que je vais pouvoir manipuler pour changer la date

// calcul du zenith en float
$zenithFloat = $zenith[0] + ($zenith[1] / 60);

/* display */

// infos de la journée ($date = new DateTime();)
getSunInfos($date, $latitude, $longitude, $zenithFloat, $utc);

// infos de demain (add interval de P1D, Period 1 Day)
$date->add(new DateInterval('P1D'));// 
getSunInfos($date, $latitude, $longitude, $zenithFloat, $utc);

function getSunInfos($date, $latitude, $longitude, $zenithFloat, $utc)
{
  global $zenith;
  // debug des variables
  var_dump([
    '$latitude' => $latitude,
    '$longitude' => $longitude,
    '$zenith' => $zenith,
    '$zenithFloat' => $zenithFloat,
    '$utc' => $utc,
    '$date' => $date
  ]);

  // j'utilise SUNFUNCS_RET_TIMESTAMP car je voulais m'afficher les secondes, c'est pour ça que je pousse le résultat dans un DateTime avec setTimestamp
  $sunrise = (new DateTime())->setTimestamp(date_sunrise($date->getTimestamp(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenithFloat, $utc));
  $sunset = (new DateTime())->setTimestamp(date_sunset($date->getTimestamp(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenithFloat, $utc));
  echo $date->format("D M d Y"). ', sunrise time : ' . $sunrise->format('H:i:s');
  echo '<br/>';
  echo $date->format("D M d Y"). ', sunset time : ' . $sunset->format('H:i:s');
  echo '<br/>';
  echo '<br/>';

  // pour controler mes résultats du dessus, notamment le calcul du zenith en float pour m'assurer que le résultat correspond pour les levé et couché quand le le zenith est de 90°35'
  $sunInfo = date_sun_info($date->getTimestamp(), $latitude, $longitude);// ici le zenith est automatique et  différent selon les clés c'est expliqué sur la doc de date_sun_info
  foreach ($sunInfo as $key => $val) {
    echo "$key: " . date("H:i:s", $val) . '<br/>';
  }
  echo '<br/>';
}
Développeur web depuis + de 20 ans

Mammouth du PHP | 506 Messages

16 avr. 2021, 11:18

Saian ah oui super cela va me donner des idées
c est gentil d avoir partage
je vais m en inspirer
encore merci