在PHP 中, date_sunrise()和date_sunset()是兩個非常實用的函數,它們可以根據指定的日期和地理坐標,計算出當天的日出和日落時間。將這兩個函數結合使用,我們可以非常方便地算出白晝的總時長。
這對於需要根據白晝長度調整業務邏輯的應用場景,比如自動開關燈、智能農場、戶外活動管理等系統來說,非常有價值。
date_sunrise(int $timestamp, int $format = SUNFUNCS_RET_STRING, float $latitude = ini_get("date.default_latitude"), float $longitude = ini_get("date.default_longitude"), float $zenith = ini_get("date.sunrise_zenith"), float $gmt_offset = 0): string|int|float|false
date_sunset(int $timestamp, int $format = SUNFUNCS_RET_STRING, float $latitude = ini_get("date.default_latitude"), float $longitude = ini_get("date.default_longitude"), float $zenith = ini_get("date.sunset_zenith"), float $gmt_offset = 0): string|int|float|false
我們以一個具體的例子來說明如何計算白晝時間:
日期:當前日期
坐標:北京市(緯度39.9042,經度116.4074)
時區:東八區(UTC+8)
<?php
date_default_timezone_set('Asia/Shanghai');
$timestamp = time();
$latitude = 39.9042;
$longitude = 116.4074;
$gmt_offset = 8;
// 獲取日出和日落時間(以 UNIX 時間戳形式返回)
$sunrise = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90, $gmt_offset);
$sunset = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90, $gmt_offset);
if ($sunrise !== false && $sunset !== false) {
$dayLength = $sunset - $sunrise;
// 轉換為小時分鐘格式
$hours = floor($dayLength / 3600);
$minutes = floor(($dayLength % 3600) / 60);
echo "日出時間: " . date("H:i:s", $sunrise) . PHP_EOL;
echo "日落時間: " . date("H:i:s", $sunset) . PHP_EOL;
echo "白晝時長: {$hours}小時{$minutes}分鐘" . PHP_EOL;
} else {
echo "无法计算日出或日落時間。請檢查坐標或日期設置。";
}
date_sunrise()和date_sunset()默認使用的天頂角為90 度。這表示從地平線剛升起或剛落下的位置計算日出日落時間。可以根據需要自行調整。
時區偏移( $gmt_offset )必須正確設置,確保輸出時間符合本地時間。
如果返回的是false ,通常是因為坐標設置異常、極晝或極夜等特殊情況。
該計算方法可以輕鬆嵌入到任何時間敏感的系統中,比如:
自動調節燈光系統(如智能家居控制器)
天文類API 接口,比如https://api.gitbox.net/astro/daylength?lat=39.9&lon=116.4
戶外天氣小組件,展示實時白晝變化
利用PHP 自帶的這些太陽函數,我們可以在不依賴外部服務的情況下,準確地獲取與太陽高度角相關的時間數據,為系統提供更加智能化的判斷依據。