(PHP 5, PHP 7, PHP 8)

date_sunset Returns time of sunset for a given day and location


This function has been DEPRECATED as of PHP 8.1.0. Relying on this function is highly discouraged. Use date_sun_info() instead.


    int $timestamp,
    int $returnFormat = SUNFUNCS_RET_STRING,
    ?float $latitude = null,
    ?float $longitude = null,
    ?float $zenith = null,
    ?float $utcOffset = null
): string|int|float|false

date_sunset() returns the sunset time for a given day (specified as a timestamp) and location.

Elenco dei parametri


The timestamp of the day from which the sunset time is taken.


returnFormat 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 int (timestamp) 1095034606


Defaults to North, pass in a negative value for South. See also: date.default_latitude


Defaults to East, pass in a negative value for West. See also: date.default_longitude


zenith is the angle between the center of the sun and a line perpendicular to earth's surface. It defaults to date.sunset_zenith

Common zenith angles
Angle Description
90°50' Sunset: the point where the sun becomes invisible.
96° Civil twilight: conventionally used to signify the end of dusk.
102° Nautical twilight: the point at which the horizon ends being visible at sea.
108° Astronomical twilight: the point at which the sun ends being the source of any illumination.


Specified in hours. The utcOffset is ignored, if returnFormat is SUNFUNCS_RET_TIMESTAMP.

Valori restituiti

Returns the sunset time in a specified returnFormat on success o false in caso di fallimento. One potential reason for failure is that the sun does not set at all, which happens inside the polar circles for part of the year.


Ogni chiamata a una funzione data/ora genera un E_NOTICE se il time zone non è valido, e/o un messaggio E_STRICT o E_WARNING se si usano le impostazioni di sistema o la variabile d'ambiente TZ. Vedere anche date_default_timezone_set()

Log delle modifiche

Versione Descrizione
8.1.0 This function has been deprecated in favor of date_sun_info().
8.0.0 latitude, longitude, zenith and utcOffset are nullable now.


Example #1 date_sunset() example


/* 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_STRING38.4, -9901);


Il precedente esempio visualizzerà qualcosa simile a:

Mon Dec 20 2004, sunset time : 18:13

Example #2 No sunset

var_dump(date_sunset($solsticeSUNFUNCS_RET_STRING69.245833, -53.537222));

Il precedente esempio visualizzerà:


Vedere anche:

  • date_sun_info() - Returns an array with information about sunset/sunrise and twilight begin/end

add a note add a note

User Contributed Notes 3 notes

matt at mctsoft dot net
3 years ago
yes SUNFUNCS_RET_TIMESTAMP does return GMT(0) time

so something like...

$arr = localtime(date_sunset(time(),SUNFUNCS_RET_TIMESTAMP,51.5,0)); // London

$hh = $arr[2];
$mm = $arr[1];

Will give figure out your localtime and daylight saving (BST)
nospam at nomail dot com
4 years ago
maybe I am wrong, but I think


SUNFUNCS_RET_STRING     Return local time
SUNFUNCS_RET_DOUBLE     Return local time
michael at dayah dot com
16 years ago
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.


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
                if ((
$now > $sunrise) || ($now < $sunset)) return "day";
                else return
To Top