当前位置: 首页> 最新文章列表> date_sunset() 与 date_diff() 计算日落与当前时间差

date_sunset() 与 date_diff() 计算日落与当前时间差

M66 2025-06-05

在 PHP 中,date_sunset() 是一个用于获取特定日期和地理位置的日落时间的函数,而 date_diff() 可以计算两个日期时间之间的时间间隔。结合这两个函数,我们可以很方便地得出“现在离今天日落还有多久”。

下面我们通过一个简单的示例来演示如何实现这个功能。

示例代码:

<?php
// 设置时区
date_default_timezone_set('Asia/Shanghai');

// 获取当前时间
$currentTime = new DateTime();

// 设置日期和地理位置(以北京时间和北京位置为例)
$timestamp = time();
$latitude = 39.9042;   // 北京纬度
$longitude = 116.4074; // 北京经度

// 获取今天日落时间(返回的是时间戳)
$sunsetTimestamp = date_sunset(
    $timestamp,
    SUNFUNCS_RET_TIMESTAMP,
    $latitude,
    $longitude,
    90,  // 海拔角度,一般设为90表示标准日落
    date("Z") / 3600  // 当前时区的小时数
);

// 将日落时间转换为 DateTime 对象
$sunsetTime = new DateTime();
$sunsetTime->setTimestamp($sunsetTimestamp);

// 计算当前时间与日落时间的差距
$interval = date_diff($currentTime, $sunsetTime);

// 判断是还有时间还是已经日落
if ($sunsetTime > $currentTime) {
    echo "距离日落还有 " . $interval->h . " 小时 " . $interval->i . " 分钟。";
} else {
    echo "日落已经过去了 " . $interval->h . " 小时 " . $interval->i . " 分钟。";
}
?>

输出示例:

距离日落还有 2 小时 34 分钟。

或者如果已经日落:

日落已经过去了 1 小时 12 分钟。

注意事项:

  1. date_sunset() 需要提供经纬度参数,不同地区的值会影响计算结果;

  2. 函数中的 date("Z") / 3600 用于动态获取当前服务器的时区偏移,确保结果准确;

  3. date_diff() 返回的是 DateInterval 对象,其中的 hi 属性代表小时和分钟部分。