PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

date_sunset> <date_sun_info
Last updated: Fri, 11 Apr 2008

view this page in

date_sunrise

(PHP 5)

date_sunrise — Obtiene la hora del amanecer de un día y lugar concretos

Descripción

mixed date_sunrise ( int $marca_de_tiempo [, int $formato [, float $latitud [, float $longitud [, float $cenit [, float $diferencia_gmt ]]]]] )

date_sunrise() devuelve la hora del amanecer de un día (indicado en marca_de_tiempo ) y lugar concretos. Los par´metros latitud , longitud y cenit tienen unos valores por defecto iguales a las opciones de configuración date.default_latitude, date.default_longitude y date.sunrise_zenith respectivamente.

El valor de latitud se interpreta por defecto respecto del Norte. Si se quiere especificar un valor respecto del Sur, se debe pasar un valor negativo. Igualmente, longitude se interpreta por defecto referido al Este (y se debe emplear un valor negativo para referenciarlo respecto del Oeste).

El parámetro diferencia_gmt se indica en horas.

Constantes de formato
Constante Descripción Ejemplo
SUNFUNCS_RET_STRING Devuelve la hora del amanecer como una variable de tipo string 16:46
SUNFUNCS_RET_DOUBLE Devuelve el resultado como una variable de tipo float 16.78243132
SUNFUNCS_RET_TIMESTAMP Devuelve el resultado como una variable de tipo integer (es decir, una marca de tiempo) 1095034606

Example #1 Ejemplo de date_sunrise()

<?php

/* Calcula la hora del amanecer de Lisboa, Portugal
Latitud: 38.4 Norte
Longitud: 9 Oeste
Cenit ~= 90
Diferencia horaria: +1 GMT
*/

echo date("D M d Y"). ', hora del amanecer : ' .date_sunrise(time(), SUNFUNCS_RET_STRING38.4, -9901);

?>

El resultado del ejemplo seria algo similar a:

Mon Dec 20 2004, hora del amanecer : 08:54

Vea también date_sunset().



date_sunset> <date_sun_info
Last updated: Fri, 11 Apr 2008
 
add a note add a note User Contributed Notes
date_sunrise
fingers at 4tfingers dot info
26-Apr-2008 05:47
Just for those that are as stupid as me
for the settings in php.ini and sunrise/sunset after googling for a while if found this info

;`Zenith' is the angle that the centre of the Sun makes to a line perpendicular to the Earth's surface.
;
; The best Overall figure for zenith is 90+(50/60) degrees for true sunrise/sunset
; Civil twilight 96 degrees - Conventionally used to signify twilight
; Nautical twilight 102 degrees - the point at which the horizon stops being visible at sea.
; Astronical twilight at 108 degrees - the point when Sun stops being a source of any illumination.
;
;date.sunrise_zenith = 90.583333  85.4
;date.sunset_zenith = 90.583333   85.4
php at stock-consulting dot com
27-Mar-2005 02:22
The function of jbr (AT) ya-right.com will run into an infinite loop for dates/locations without, for example, astronomical twilight (it never gets dark enough for astronomical twilight during June in Cologne, for exmple). Below a quick fix:
<?
function sun_times($time, $lat, $lon, $offset, $format, $dst) {
  
$offset += $dst;
  
$offset = $offset == 13 ? -11 : $offset;
  
$math = array(1.5708, 4.71239, 3.14159, 6.28319, (0.0174533 * $lat), (0.0174533 * $lon), (0.261799  * $offset));
  
$data = array('astronomical' => -.309017, 'nautical' => -.207912, 'civil' => -.104528, 'sun' => -.0145439);
  
$sd = explode(' ', date('n j Y z', $time));
  
$times = array();

   foreach (
$data as $a => $b)    {
       for (
$x = 0; $x <= 1; $x++) {
          
$e = $sd[3] + (($math[$x] - $math[5]) / $math[3]);
          
$f = ($e * .017202) - .0574039;
          
$g = $f + .0334405 * sin($f);
          
$g +=  4.93289 + (3.49066E-04) * sin(2 * $f);
           while (
$g < 0) {
              
$g += $math[3];
           }
           while (
$g >= $math[3]) {
              
$g -= $math[3];
           }
          
$g += ($g / $math[0]) - intval($g / $math[0]) == 0 ? 4.84814E-06 : 0;
          
$h = sin($g) / cos($g);
          
$h = atan2(.91746 * $h, 1);
          
$h += $g > $math[1] ? $math[3] : ($g > $math[0] ? $math[2] : 0);
          
$i = .39782 * sin($g);
          
$i = $i / sqrt (-$i * $i + 1);
          
$i = atan2($i, 1);
          
$j = $b - (sin($i) * sin($math[4]));
          
$j = $j / (cos($i) * cos($math[4]));
          
$j = $j / sqrt(-$j * $j + 1);
          
$j = $math[0] - atan2($j, 1);
           if (!
$x) {
              
$j = $math[3] - $j;
           }
          
$k = $j + $h - 0.0172028 * $e - 1.73364;
          
$l = $k - $math[5];
          
$n = $l + $math[6];
// Changes begin here
          
$key = ($a != 'sun' ? ($x ? 'end' : 'start') : ($x ? $a . 'set' : $a . 'rise'));
           if (
is_nan($n)) {
              
$times[$a][$key] = '-';
            } else {
               while (
$n < 0) {
                  
$n += $math[3];
               }
               while (
$n >= $math[3]) {
                  
$n -= $math[3];
               }
              
$n = $n * 3.81972;
              
$hour = intval($n);
              
$mins = intval((($n - $hour) * 60) + 0.5);
              
$times[$a][$key] = date($format, mktime($hour, $mins, 0, $sd[0], $sd[1], $sd[2]));
           }
// Changes end here
      
}
   }
   return(
$times);
}
?>
djwice at [the same] dot com
02-Dec-2004 10:41
The way to use this:

<?php

// De Bilt, The Netherlands, weather station #06260
$lat = 52.10;    // North
$long = 5.18;    // East
$offset = 1;    // difference between GMT and local time in hours

$zenith=90+50/60;
echo
"<br><p>Sunrise: ".date_sunrise(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);
echo
"<br>Sunset: ".date_sunset(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);

$zenith=96;
echo
"<br><p>Civilian Twilight start: ".date_sunrise(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);
echo
"<br>Civilian Twilight end: ".date_sunset(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);

$zenith=102;
echo
"<br><p>Nautical Twilight start: ".date_sunrise(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);
echo
"<br>Nautical Twilight end: ".date_sunset(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);

$zenith=108;
echo
"<br><p>Astronomical Twilight start: ".date_sunrise(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);
echo
"<br>Astronomical Twilight end: ".date_sunset(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);

?>

Zenith according to the U.S. Navy's 1990 Almanac for Computers.

Thanks to George King.
More sources about this topic:

http://www.qarlos.free.fr/navegacion/Sextante/formulas.htm
http://williams.best.vwh.net/sunrise_sunset_algorithm.htm
http://www.kevinboone.com/suntimes.html
http://star-www.st-and.ac.uk/~fv/webnotes/chapt12.htm

date_sunset> <date_sun_info
Last updated: Fri, 11 Apr 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites