当前位置: 首页> 最新文章列表> 如何使用 date_sunset() 获取格林威治时间(GMT)下的日落时间

如何使用 date_sunset() 获取格林威治时间(GMT)下的日落时间

M66 2025-06-03

在 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 下的日落时间

格林威治时间(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

注意事项

  1. PHP 8.1+ 的变更:从 PHP 8.1 开始,gmt_offset 参数已被移除,因此无法直接指定 GMT 偏移。如果你使用的是 PHP 8.1 或更高版本,建议通过设置默认时区为 UTC 来实现。

  2. 推荐做法(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";
?>
  1. 结果格式:你可以使用 SUNFUNCS_RET_TIMESTAMP 获取 Unix 时间戳,或使用 SUNFUNCS_RET_DOUBLE 获取浮点格式(小时数,例如 19.58)。

小结

通过 date_sunset() 函数,你可以轻松地获取任意地理位置在指定日期下的日落时间。如果你希望获取的是格林威治时间(GMT),关键在于设置经纬度为格林威治天文台附近的坐标,并将时区偏移设置为 0(或设置默认时区为 UTC)