note 50159 modified in function.date-sunset by cece

From: 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

« previous php.notes (#98611) next »