In PHP, the date_sunset() function is used to calculate the sunset time for a specific time and location, returning either a timestamp or a formatted string. However, in some cases, the function may return false, which usually indicates an error or calculation failure. This article delves into some common reasons why date_sunset() might return false and how to prevent these issues.
date_sunset() is typically used as follows:
date_sunset(
int $timestamp,
int $returnFormat = 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 $gmtOffset = 0
): string|int|false
If certain parameters are not passed correctly, especially the latitude ($latitude) and longitude ($longitude), the function may return false.
// Incorrect example: latitude and longitude not set
$sunset = date_sunset(time());
if ($sunset === false) {
echo "Unable to calculate sunset time";
}
Solution: Ensure that valid latitude and longitude values are passed:
$sunset = date_sunset(time(), SUNFUNCS_RET_STRING, 31.7667, 35.2333, 90, 2);
If the latitude is outside the range of -90 to 90, or the longitude is outside the range of -180 to 180, the function cannot process the values correctly and will return false.
// Invalid latitude and longitude
$sunset = date_sunset(time(), SUNFUNCS_RET_STRING, 1234, 5678); // Invalid
Make sure the parameters fall within valid geographical coordinate ranges.
date_sunset() uses internal calculations based on timestamps. If the timestamp exceeds the integer range supported by PHP (especially on 32-bit systems), it may cause the function to return false.
// Timestamp exceeds 32-bit system range
$sunset = date_sunset(99999999999, SUNFUNCS_RET_STRING, 40.7128, -74.0060);
It is recommended to use time() or a valid strtotime() to generate a legitimate timestamp.
PHP allows you to set default latitude, longitude, and zenith values through the php.ini file. If these values are not set correctly or are misconfigured, it may indirectly cause date_sunset() to malfunction.
echo ini_get('date.default_latitude');
echo ini_get('date.default_longitude');
If the output is empty or not a number, you should manually pass these parameters in your code.
In polar regions, the sun does not rise or set for certain periods during the year (such as the polar night or midnight sun in the Arctic). In such cases, date_sunset() may also return false, because there is no "sunset" phenomenon on those days.
// Location at the North Pole, no sunset on a specific day
$sunset = date_sunset(strtotime("2025-01-01"), SUNFUNCS_RET_STRING, 89.9, 135.0);
The last parameter, $gmtOffset, controls the offset from GMT (UTC), in hours. If this value is set incorrectly, it may result in unexpected outcomes.
For example, Beijing time should be +8.0, but if set to -8.0, it may produce incorrect results or false.
date_sunset() is a very useful time-related function, but it depends on several parameters, and any mistake in one of them could lead to false. To use it correctly, you should:
Clearly pass the timestamp, latitude, longitude, and other key parameters
Check if there are any issues with the relevant settings in php.ini
Avoid calls under extreme geographical or time conditions