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(); ?>