在开发日历应用或者天气预报功能时,我们经常需要显示每天的日落时间。幸运的是,PHP 内置了非常方便的函数可以帮我们获取日落时间,不需要依赖复杂的API。本文将教你如何使用 PHP 获取未来 7 天的日落时间,并适合直接在日历上展示。
PHP 提供了 date_sunset() 函数,可以基于指定日期、地理位置(纬度和经度)计算出当天的日落时间。基本的调用方式如下:
$sunset = date_sunset(time(), SUNFUNCS_RET_STRING, 40.7128, -74.0060);
echo "今日日落时间是:" . $sunset;
这里的参数说明:
time(): 当前时间戳。
SUNFUNCS_RET_STRING: 返回时间的格式(字符串)。
40.7128: 纬度(例如纽约市的纬度)。
-74.0060: 经度。
但我们想要的是未来 7 天的日落时间,所以需要稍作扩展。
下面的完整示例代码展示了如何循环出未来一周的日落时间列表:
<?php
date_default_timezone_set('America/New_York'); // 根据需要设置正确的时区
// 设定地理位置(例如纽约)
$latitude = 40.7128;
$longitude = -74.0060;
$sunset_times = [];
for ($i = 0; $i < 7; $i++) {
$timestamp = strtotime("+$i day");
$sunset = date_sunset(
$timestamp,
SUNFUNCS_RET_STRING,
$latitude,
$longitude,
90, // 太阳在地平线以下角度(标准值 90)
date("Z", $timestamp)
);
$sunset_times[] = [
'date' => date('Y-m-d', $timestamp),
'sunset' => $sunset
];
}
// 输出结果
foreach ($sunset_times as $day) {
echo "日期:" . $day['date'] . ",日落时间:" . $day['sunset'] . "<br>";
}
?>
date_default_timezone_set() 必须正确设置,否则返回的日落时间可能偏差。
date("Z", $timestamp) 用来自动匹配不同日期可能出现的夏令时变化。
90 是标准太阳高度角,不建议更改,除非有特殊需求。
假设你希望通过一个接口,从服务器获取未来 7 天的日落时间数据供前端使用,可以这样写一个简单的API:
<?php
header('Content-Type: application/json');
date_default_timezone_set('America/New_York');
$latitude = 40.7128;
$longitude = -74.0060;
$sunset_times = [];
for ($i = 0; $i < 7; $i++) {
$timestamp = strtotime("+$i day");
$sunset = date_sunset(
$timestamp,
SUNFUNCS_RET_STRING,
$latitude,
$longitude,
90,
date("Z", $timestamp)
);
$sunset_times[] = [
'date' => date('Y-m-d', $timestamp),
'sunset' => $sunset
];
}
echo json_encode($sunset_times);
?>
然后前端可以通过访问接口,例如:
fetch('https://m66.net/api/sunset_times.php')
.then(response => response.json())
.then(data => {
console.log(data);
});
这样,你就能在网页日历上动态展示未来一周的日落时间了!
通过 date_sunset(),我们可以非常方便地在 PHP 中计算日落时间,不需要依赖第三方API,速度快,稳定可靠。如果你需要更精准的天文数据(比如考虑大气折射、地形遮挡等),也可以考虑后续集成专业天文计算库。但对于一般的应用场景,这种方法已经绰绰有余。