在本文中,我们将学习如何使用PHP的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)。
下面这段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文件,内容是每天的日落时间。
我们可以使用简单的前端库(如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,按照你的要求。
通过以上方法,我们用PHP采集了一整年的日落数据,并通过前端技术绘制出了变化图。这样可以直观地看到一年中日落时间的变化趋势,非常适合做天气应用、天文观测提醒等功能。
如果你希望让这套系统更加完善,还可以加入缓存策略、支持不同城市切换等功能,进一步提升用户体验。