當前位置: 首頁> 最新文章列表> 與sun_info()(自定義函數)組合輸出更多日照信息

與sun_info()(自定義函數)組合輸出更多日照信息

M66 2025-06-02

在PHP 中, date_sunset()是一個非常實用的函數,用於根據日期和地理位置計算日落時間。然而,單獨使用date_sunset()往往只能獲取有限的信息,比如僅返回日落時間。為了獲取更全面的日照信息(如日出、日落、太陽正午、日照時長等),我們可以封裝一個自定義函數sun_info()來整合date_sun_info()date_sunset()的能力,輸出更豐富的太陽相關數據。

下面,我們將展示如何實現sun_info()函數,並結合date_sunset()獲取並輸出詳細的日照信息。

基礎知識: date_sunset()date_sun_info()

首先,簡單介紹兩個關鍵函數的用途:

  • date_sunset() :獲取指定時間和地理位置的日落時間。

  • date_sun_info() :返回一個數組,包含日出、日落、黃昏、黎明、太陽正午等詳細信息。

雖然date_sun_info()的功能更全面,但我們可以利用date_sunset()的可配置性(如不同的zenith 角度)來獲取更精細的數據。

自定義函數:sun_info()

我們編寫一個函數sun_info() ,該函數接受日期、經度、緯度和時區作為參數,返回一個結構化數組,包含如下信息:

  • 日出時間

  • 日落時間

  • 日照長度(單位:分鐘)

  • 太陽正午時間

  • 黃昏(civil dusk)時間

  • 黎明(civil dawn)時間

function sun_info($date, $latitude, $longitude, $timezone = 'UTC') {
    $timestamp = strtotime($date);

    $sunData = date_sun_info($timestamp, $latitude, $longitude);
    $sunset = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude);
    $sunrise = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude);

    $daylightMinutes = round(($sunset - $sunrise) / 60);

    // 轉換為指定時區格式化輸出
    $dtZone = new DateTimeZone($timezone);
    $format = function($ts) use ($dtZone) {
        if (!$ts || $ts < 0) return 'N/A';
        $dt = new DateTime("@$ts");
        $dt->setTimezone($dtZone);
        return $dt->format('H:i:s');
    };

    return [
        'sunrise'     => $format($sunData['sunrise']),
        'sunset'      => $format($sunData['sunset']),
        'solar_noon'  => $format($sunData['solar_noon']),
        'civil_dawn'  => $format($sunData['civil_twilight_begin']),
        'civil_dusk'  => $format($sunData['civil_twilight_end']),
        'day_length'  => $daylightMinutes . ' 分鐘',
    ];
}

示例使用

假設你希望獲取北京在2025 年4 月26 日的日照信息,可以這樣調用:

 $info = sun_info('2025-04-26', 39.9042, 116.4074, 'Asia/Shanghai');

echo "北京今日太陽信息:<br>";
foreach ($info as $label => $value) {
    echo ucfirst(str_replace('_', ' ', $label)) . ': ' . $value . '<br>';
}

輸出示例可能如下:

 Beijing 今日太陽信息:
Sunrise: 05:21:32  
Sunset: 18:57:20  
Solar noon: 12:09:26  
Civil dawn: 04:53:10  
Civil dusk: 19:25:42  
Day length: 456 分鐘

拓展應用:前端展示與鏈接集成

為了更直觀地展示這些日照信息,可以結合JavaScript 或圖表庫進一步美化輸出效果。你還可以在頁面上集成一個鏈接,例如:

 echo '<a href="https://m66.net/sun?lat=39.9&lon=116.4&date=2025-04-26">查看更多日照詳情</a>';