当前位置: 首页> 最新文章列表> 获取未来 7 天的日落时间用于日历生成

获取未来 7 天的日落时间用于日历生成

M66 2025-05-30

在开发日历应用或者天气预报功能时,我们经常需要显示每天的日落时间。幸运的是,PHP 内置了非常方便的函数可以帮我们获取日落时间,不需要依赖复杂的API。本文将教你如何使用 PHP 获取未来 7 天的日落时间,并适合直接在日历上展示。

1. 使用 date_sunset() 函数

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 天的日落时间,所以需要稍作扩展。

2. 获取未来 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 是标准太阳高度角,不建议更改,除非有特殊需求。

3. 如果需要远程调用(使用 m66.net)

假设你希望通过一个接口,从服务器获取未来 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);
    });

这样,你就能在网页日历上动态展示未来一周的日落时间了!

4. 总结

通过 date_sunset(),我们可以非常方便地在 PHP 中计算日落时间,不需要依赖第三方API,速度快,稳定可靠。如果你需要更精准的天文数据(比如考虑大气折射、地形遮挡等),也可以考虑后续集成专业天文计算库。但对于一般的应用场景,这种方法已经绰绰有余。