I use an IP to location database to determine the visitor's approximate latitude and longitude and then serve them a day or night color scheme based on whether it is before civil dawn or dusk. I've had problems when not specifying the timezone, specifically a 1 hour error, so I use GMT.
<?php
date_default_timezone_set("GMT");
function scheme() {
$sunrise = date_sunrise(time(), SUNFUNCS_RET_DOUBLE, $latitude, $longitude, 96, 0);
$sunset = date_sunset(time(), SUNFUNCS_RET_DOUBLE, $latitude, $longitude, 96, 0);
$now = date("H") + date("i") / 60 + date("s") / 3600;
if ($sunrise < $sunset)
if (($now > $sunrise) && ($now < $sunset)) return "day";
else return "night";
else
if (($now > $sunrise) || ($now < $sunset)) return "day";
else return "night";
}
?>
date_sunset
(PHP 5)
date_sunset — Returns time of sunset for a given day and location
Opis
date_sunset() returns the sunset time for a given day (specified as a timestamp ) and location.
Parametry
- timestamp
-
The timestamp of the day from which the sunset time is taken.
- format
-
format constants constant description example SUNFUNCS_RET_STRING returns the result as string 16:46 SUNFUNCS_RET_DOUBLE returns the result as float 16.78243132 SUNFUNCS_RET_TIMESTAMP returns the result as integer (timestamp) 1095034606 - latitude
-
Defaults to North, pass in a negative value for South. See also: date.default_latitude
- longitude
-
Defaults to East, pass in a negative value for West. See also: date.default_longitude
- zenith
-
Default: date.sunrise_zenith
- gmtoffset
-
Specified in hours.
Błędy/Wyjątki
Każde wywołanie do funkcji date/time spowoduje wygenerowanie E_NOTICE jeśli strefa czasowa jest nieprawidłowa, lub/i wiadomość E_STRICT jeśli użyto ustawień systemu lub zmiennej środowiskowej TZ. Patrz także date_default_timezone_set()
Rejestr zmian
| Wersja | Opis |
|---|---|
| 5.1.0 | Teraz generuje błędy strefy czasowej o poziomie E_STRICT i E_NOTICE. |
Zwracane wartości
Returns the sunset time in a specified format on success, or FALSE on failure.
Przykłady
Example #1 date_sunset() example
<?php
/* calculate the sunset time for Lisbon, Portugal
Latitude: 38.4 North
Longitude: 9 West
Zenith ~= 90
offset: +1 GMT
*/
echo date("D M d Y"). ', sunset time : ' .date_sunset(time(), SUNFUNCS_RET_STRING, 38.4, -9, 90, 1);
?>
Powyższy przykład wyświetli coś podobnego do:
Mon Dec 20 2004, sunset time : 18:13
date_sunset
30-Sep-2006 02:17
02-Dec-2004 10:39
A 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);
?>
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
