在 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 分钟。
date_sunset() 需要提供经纬度参数,不同地区的值会影响计算结果;
函数中的 date("Z") / 3600 用于动态获取当前服务器的时区偏移,确保结果准确;
date_diff() 返回的是 DateInterval 对象,其中的 h 和 i 属性代表小时和分钟部分。