date_sunset

(PHP 5, PHP 7, PHP 8)

date_sunset 返回给定的日期与地点的日落时间

警告

该函数自 PHP 8.1.0 起弃用。强烈建议不要依赖此函数。请改用 date_sun_info()

说明

date_sunset(
    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() 返回给定的日期(以 timestamp 指定)与地点的日落时间。

参数

timestamp

返回给定的日期(以 timestamp 指定)的日落时间。

returnFormat

returnFormat 常量
常量 说明 取值举例
SUNFUNCS_RET_STRING string 格式返回结果 16:46
SUNFUNCS_RET_DOUBLE float 格式返回结果 16.78243132
SUNFUNCS_RET_TIMESTAMP int 格式(时间戳)返回结果 1095034606

latitude

默认是指北纬。因此如果要指定南纬,必须传递一个负值。参见:date.default_latitude

longitude

默认是指东经。因此如果要指定西经,必须传递一个负值。参见:date.default_longitude

zenith

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

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

utcOffset

单位是小时。 The utcOffset is ignored, if returnFormat is SUNFUNCS_RET_TIMESTAMP.

返回值

用指定的格式 returnFormat 返回日落时间, 或者在失败时返回 false。 One potential reason for failure is that the sun does not rise at all, which happens inside the polar circles for part of the year.

错误/异常

在每次调用日期/时间函数时,如果时区无效则会引发 E_NOTICE 错误。参见 date_default_timezone_set()

更新日志

版本 说明
8.1.0 此函数已弃用,请改用 date_sun_info()
8.0.0 latitude, longitude, zenith and utcOffset are nullable now.

示例

示例 #1 date_sunset() 例子

<?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);

?>

以上示例的输出类似于:

Mon Dec 20 2004, sunset time : 18:13

示例 #2 No sunrise

<?php
$solstice
= strtotime('2017-12-21');
var_dump(date_sunrise($solstice, SUNFUNCS_RET_STRING, 69.245833, -53.537222));
?>

以上示例会输出:

bool(false)

参见

  • 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

up
1
matt at mctsoft dot net
5 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)
up
-1
nospam at nomail dot com
6 years ago
maybe I am wrong, but I think

SUNFUNCS_RET_TIMESTAMP     return GMT(0) time

SUNFUNCS_RET_STRING     Return local time
SUNFUNCS_RET_DOUBLE     Return local time
up
-25
michael at dayah dot com
18 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.

<?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";
}
?>
To Top