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 — Retourne l'heure de coucher du soleil pour un jour et un endroit donnés
Description
$timestamp
[, int $format = SUNFUNCS_RET_STRING
[, float $latitude = ini_get("date.default_latitude")
[, float $longitude = ini_get("date.default_longitude")
[, float $zenith = ini_get("date.sunset_zenith")
[, float $gmt_offset = 0
]]]]] )
date_sunset() retourne l'heure de couché du soleil pour
un jour (spécifié en tant que timestamp Unix) et un endroit donnés.
Liste de paramètres
-
timestamp -
Le
timestampUnix du jour pour lequel l'heure du couché du soleil est donnée. -
format -
Constantes pour le paramètre formatConstante Description Exemple SUNFUNCS_RET_STRING Retourne le résultat sous la forme d'une chaîne de caractères 16:46 SUNFUNCS_RET_DOUBLE Retourne le résultat sous la forme d'un nombre décimal 16.78243132 SUNFUNCS_RET_TIMESTAMP Retourne le résultat sous la forme d'un entier (timestamp) 1095034606 -
latitude -
Par défaut, c'est le Nord. Passez une valeur négative pour le Sud. Voir aussi date.default_latitude.
-
longitude -
Par défaut, c'est l'Est. Passez une valeur négative pour l'Ouest. Voir aussi date.default_longitude.
-
zenith -
Par défaut : date.sunrise_zenith
-
gmtoffset -
Spécifié en heures.
Erreurs / Exceptions
Chaque appel à une fonction date/heure générera un message de type
E_NOTICE si le fuseau horaire n'est pas valide,
et/ou un message de type E_STRICT
ou E_WARNING si vous
utilisez la configuration du système ou la variable d'environnement
TZ. Voir aussi date_default_timezone_set()
Historique
| Version | Description |
|---|---|
| 5.1.0 |
Émet un message de type |
Valeurs de retour
Retourne l'heure de couché du soleil dans un format
spécifié ou FALSE si une erreur survient.
Exemples
Exemple #1 Exemple avec date_sunset()
<?php
/* Calcul l'heure du couché du soleil pour Lisbonne, 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);
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
Mon Dec 20 2004, sunset time : 18:13
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
