在 PHP 中,date_sunset() 是一个非常实用的函数,它可以用来根据指定的日期、地理位置和其他参数计算太阳的日落时间。本文将介绍如何使用该函数获取**格林威治时间(GMT)**下的日落时间,并举例说明其具体用法。
date_sunset(
int $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 = ini_get("date.default_timezone") // PHP 8.1+ 中已移除
): string|int|float|false
但在实际使用中,常见的调用方式更简单,尤其是在 PHP 8.0 及以下版本中。
格林威治时间(GMT)对应的是经度 0,我们可以选取纬度为 51.4769(即英国格林威治天文台附近)作为示例。关键点在于将 gmt_offset 设置为 0,这样返回的时间就是 GMT 时间。
<?php
// 设置当前时间戳为今天的 12:00 PM
$timestamp = strtotime('today noon');
// 格林威治位置
$latitude = 51.4769;
$longitude = 0.0005;
// 使用 date_sunset 获取 GMT 下的日落时间(返回时间为字符串格式)
$sunset = date_sunset(
$timestamp,
SUNFUNCS_RET_STRING,
$latitude,
$longitude,
90, // zenith 默认值,一般使用 90
0 // GMT 偏移为 0
);
echo "格林威治时间下的日落时间为: $sunset";
?>
输出示例(视当前日期而定):
格林威治时间下的日落时间为: 19:58
PHP 8.1+ 的变更:从 PHP 8.1 开始,gmt_offset 参数已被移除,因此无法直接指定 GMT 偏移。如果你使用的是 PHP 8.1 或更高版本,建议通过设置默认时区为 UTC 来实现。
推荐做法(PHP 8.1+):
<?php
date_default_timezone_set('UTC');
$timestamp = strtotime('today noon');
$latitude = 51.4769;
$longitude = 0.0005;
$sunset = date_sunset(
$timestamp,
SUNFUNCS_RET_STRING,
$latitude,
$longitude,
90
);
echo "格林威治时间(UTC)下的日落时间为: $sunset";
?>
结果格式:你可以使用 SUNFUNCS_RET_TIMESTAMP 获取 Unix 时间戳,或使用 SUNFUNCS_RET_DOUBLE 获取浮点格式(小时数,例如 19.58)。
通过 date_sunset() 函数,你可以轻松地获取任意地理位置在指定日期下的日落时间。如果你希望获取的是格林威治时间(GMT),关键在于设置经纬度为格林威治天文台附近的坐标,并将时区偏移设置为 0(或设置默认时区为 UTC)。