note 50159 modified in function.date-sunset by cece
| From: | cece@php.net | Date: | Tue, 15 Nov 2005 14:52:49 +0000 |
| Subject: | note 50159 modified in function.date-sunset by cece | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-98611@lists.php.net to get a copy of this message | ||
Here a function that will return an array of all valid formats, both starting and ending times!
[Editor's note: you can find thaf function on the docpage of date_sunrise()]
--was--
Here a function that will return an array of all valid formats, both starting and ending times!
astronomical
nautical
civil
sun
/* usage ( time_stamp, latitude, longitude, time_zone_offset, ouput_date_format,
use_daylight_savings_time ) */
<?
// usage
$out = sun_times ( time(), 41.59, -70.94, -5, 'r', 0 );
// just show the resulting array
print_r($out);
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];
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 );
$key = ( $a != 'sun' ? ( $x ? 'end' : 'start' ) : ( $x ? $a .
'set' : $a . 'rise' ) );
$times[$a][$key] = date ( $format, mktime ( $hour, $mins, 0, $sd[0], $sd[1], $sd[2] ) );
}
}
return ( $times );
}
?>
http://php.net/manual/en/function.date-sunset.php