當前位置: 首頁> 最新文章列表> 如何結合date_sunset 和date_sunrise 函數計算白晝時長?

如何結合date_sunset 和date_sunrise 函數計算白晝時長?

gitbox 2025-05-28

在PHP 中, date_sunrise()date_sunset()是兩個非常實用的函數,它們可以根據指定的日期和地理坐標,計算出當天的日出和日落時間。將這兩個函數結合使用,我們可以非常方便地算出白晝的總時長。

這對於需要根據白晝長度調整業務邏輯的應用場景,比如自動開關燈、智能農場、戶外活動管理等系統來說,非常有價值。

基本函數介紹

date_sunrise()

 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()

 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 "无法计算日出或日落時間。請檢查坐標或日期設置。";
}

注意事項

  1. date_sunrise()date_sunset()默認使用的天頂角為90 度。這表示從地平線剛升起或剛落下的位置計算日出日落時間。可以根據需要自行調整。

  2. 時區偏移( $gmt_offset )必須正確設置,確保輸出時間符合本地時間。

  3. 如果返回的是false ,通常是因為坐標設置異常、極晝或極夜等特殊情況。

應用擴展

該計算方法可以輕鬆嵌入到任何時間敏感的系統中,比如:

  • 自動調節燈光系統(如智能家居控制器)

  • 天文類API 接口,比如https://api.gitbox.net/astro/daylength?lat=39.9&lon=116.4

  • 戶外天氣小組件,展示實時白晝變化

利用PHP 自帶的這些太陽函數,我們可以在不依賴外部服務的情況下,準確地獲取與太陽高度角相關的時間數據,為系統提供更加智能化的判斷依據。