在開發日曆應用或者天氣預報功能時,我們經常需要顯示每天的日落時間。幸運的是,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,速度快,穩定可靠。如果你需要更精準的天文數據(比如考慮大氣折射、地形遮擋等),也可以考慮後續集成專業天文計算庫。但對於一般的應用場景,這種方法已經綽綽有餘。