info:myphp:lever-coucher-soleil

lever-coucher-soleil.php

<?
#############3
# Calcule les heures de lever et soleil à la latitude $la et à la longitude $lo le jour $jo du mois $mo. $fh est le fuseau horaire et la position est exprimée en degrés.
# source: http://dev.nexen.net/scripts/details.php?scripts=905
# GENEVE lat 46°13 long 6°09
#################
 
function h_soleil($la=0 , $lo=0 , $fh=0 , $jo=1 , $mo=1){
 $K=0.0172024;
 $JM=308.67;
 $JL=21.55;
 $E=0.0167;
 $OB=0.4091;
 $la=deg2rad(-$la);
 $lo=deg2rad(-$lo);
 $dr=M_PI/180;
 $hr=M_PI/12;
 $ht=-50/60;
 $ht=$ht*$dr;
 if($mo<3)
 {
 $mo+=12;
 }
 //Heure TU du milieu de la journée
 $h=12+$lo/$hr;
 //Nombre de jours écoulés depuis le 1 Mars O h TU
 $j=intval(30.61*($mo+1))+$jo+$h/24-123;
 //Anomalie et longitude moyenne
 $m=$K*($j-$JM);
 $l=$K*($j-$JL);
 //Longitude vrai
 $s=$l+2*$E*sin($m)+1.25*$E*$E*sin(2*$m);
 //Coordonnées rectangulaires du soleil dans le repère équatorial
 $x=cos($s);
 $y=cos($OB)*sin($s);
 $z=sin($OB)*sin($s);
 //Equation du temps et déclinaison
 //Rotation de l'angle r autour de l'axe z
 $r=$l;
 $rx=cos($r)*$x+sin($r)*$y;
 $ry=-sin($r)*$x+cos($r)*$y;
 $x=$rx;
 $y=$ry;
 $et=atan($y/$x);
 $dc=asin($z);
 //Heure de passage au méridien
 $pm=$h+$fh+$et/$hr;
 $hs=intval($pm);
 $pm=60*($pm-$hs);
 $ms=intval($pm);
 $pm=60*($pm-$ms);
 $res['meridienne']=mktime($hs, $hm, $pm, $mo, $jo, 2003);
 //Angle horaire au lever et au coucher
 $cs=(sin($ht)-sin($la)*sin($dc))/cos($la)/cos($dc);
 if($cs>1)
 {
 return false;
 }
 elseif($cs<-1)
 {
 return false;
 }
 elseif(cs==0)
 {
 if($ah=m_PI/2)
 {
 }
 else
 {
 $ah=acos($cs);
 }
 }
 elseif($cs<0)
 {
 $ah=$ah+M_PI;
 }
 //correction nord et sud
 if($la>0)
 {
 $corr_lever=-12;
 $corr_coucher=+12;
 }
 else
 {
 $corr_lever=0;
 $corr_coucher=0;
 }
 //Lever du soleil
 $pm=$h+$fh+($et-$ah)/$hr;
 if($pm<0)
 {
 $pm=$pm+24;
 }
 $hs=intval($pm);
 $pm=60*($pm-$hs);
 $res['lever']=mktime($hs+$corr_lever, $pm, 0, $mo, $jo, 2003);
 $res['h_lever']=strftime("%Hh%M", $res['lever']);
 //Coucher du soleil
 $pm=$h+$fh+($et+$ah)/$hr;
 if($pm>24)
 {
 $pm=$pm-24;
 }
 $hs=intval($pm);
 $pm=60*($pm-$hs);
 $res['coucher']=mktime($hs+$corr_coucher, $pm, 0, $mo, $jo, 2003);
 $res['h_coucher']=strftime("%Hh%M", $res['coucher']);
 return $res;
}
echo h_soleil();
?>
  • info/myphp/lever-coucher-soleil.txt
  • Dernière modification : 2018/07/18 09:45
  • de radeff