当前位置: 首页> 最新文章列表> 使用循环遍历一年中所有日落时间并生成图表

使用循环遍历一年中所有日落时间并生成图表

M66 2025-05-31

在本文中,我们将学习如何使用PHP的date_sunset函数,计算一年中每天的日落时间,并最终生成一个图表进行可视化展示。整个流程包括数据采集和图表绘制两个部分。

1. date_sunset函数简介

PHP内置的date_sunset函数可以根据指定的日期、地理位置(纬度和经度)以及海拔高度,返回日落的时间。函数基本语法如下:

date_sunset(
    int $timestamp,
    int $returnFormat = SUNFUNCS_RET_STRING,
    ?float $latitude = null,
    ?float $longitude = null,
    ?float $zenith = null,
    ?float $utcOffset = null
): string|int|float|false

常用参数说明:

  • $timestamp:日期的Unix时间戳。

  • $returnFormat:返回的格式,如字符串、时间戳等。

  • $latitude$longitude:地理坐标。

  • $utcOffset:时区偏移(例如中国是8.0)。

2. 遍历一整年并收集日落时间

下面这段PHP代码将以每天为单位,遍历一整年,获取每天的日落时间,并存入数组中:

<?php
$latitude = 39.9042;  // 示例:北京的纬度
$longitude = 116.4074; // 示例:北京的经度
$timezoneOffset = 8.0; // 北京时间

$start = strtotime('2025-01-01');
$end = strtotime('2025-12-31');

$sunsetTimes = [];

for ($day = $start; $day <= $end; $day = strtotime('+1 day', $day)) {
    $sunset = date_sunset($day, SUNFUNCS_RET_STRING, $latitude, $longitude, 90.833333, $timezoneOffset);
    $formattedDate = date('Y-m-d', $day);
    $sunsetTimes[] = [
        'date' => $formattedDate,
        'sunset' => $sunset
    ];
}

// 保存到JSON文件,方便前端绘图
file_put_contents('sunset_data.json', json_encode($sunsetTimes, JSON_PRETTY_PRINT));
?>

这段代码执行完后,会生成一个sunset_data.json文件,内容是每天的日落时间。

3. 使用图表展示日落时间

我们可以使用简单的前端库(如Chart.js)来绘制图表。这里给出一个示例HTML文件:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>2025年日落时间图表</title>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <canvas id="sunsetChart" width="1000" height="500"></canvas>

    <script>
        fetch('https://m66.net/sunset_data.json')
            .then(response => response.json())
            .then(data => {
                const labels = data.map(item => item.date);
                const sunsetTimes = data.map(item => {
                    const parts = item.sunset.split(':');
                    return parseInt(parts[0]) + parseInt(parts[1]) / 60;
                });

                const ctx = document.getElementById('sunsetChart').getContext('2d');
                new Chart(ctx, {
                    type: 'line',
                    data: {
                        labels: labels,
                        datasets: [{
                            label: '日落时间(小时)',
                            data: sunsetTimes,
                            borderColor: 'orange',
                            backgroundColor: 'rgba(255,165,0,0.3)',
                            fill: true,
                            tension: 0.3
                        }]
                    },
                    options: {
                        scales: {
                            y: {
                                title: {
                                    display: true,
                                    text: '时间(小时)'
                                }
                            },
                            x: {
                                title: {
                                    display: true,
                                    text: '日期'
                                },
                                ticks: {
                                    maxTicksLimit: 12
                                }
                            }
                        }
                    }
                });
            });
    </script>
</body>
</html>

注意,上面fetch的数据URL已经替换成了https://m66.net/sunset_data.json,按照你的要求。

4. 小结

通过以上方法,我们用PHP采集了一整年的日落数据,并通过前端技术绘制出了变化图。这样可以直观地看到一年中日落时间的变化趋势,非常适合做天气应用、天文观测提醒等功能。

如果你希望让这套系统更加完善,还可以加入缓存策略、支持不同城市切换等功能,进一步提升用户体验。