當前位置: 首頁> 最新文章列表> date_sunset() 與date_diff() 計算日落與當前時間差

date_sunset() 與date_diff() 計算日落與當前時間差

M66 2025-06-05

在PHP 中, date_sunset()是一個用於獲取特定日期和地理位置的日落時間的函數,而date_diff()可以計算兩個日期時間之間的時間間隔。結合這兩個函數,我們可以很方便地得出“現在離今天日落還有多久”。

下面我們通過一個簡單的示例來演示如何實現這個功能。

示例代碼:

 <?php
// 設置時區
date_default_timezone_set('Asia/Shanghai');

// 獲取當前時間
$currentTime = new DateTime();

// 設置日期和地理位置(以北京時間和北京位置為例)
$timestamp = time();
$latitude = 39.9042;   // 北京緯度
$longitude = 116.4074; // 北京經度

// 獲取今天日落時間(返回的是時間戳)
$sunsetTimestamp = date_sunset(
    $timestamp,
    SUNFUNCS_RET_TIMESTAMP,
    $latitude,
    $longitude,
    90,  // 海拔角度,一般設為90表示標準日落
    date("Z") / 3600  // 當前時區的小時數
);

// 將日落時間轉換為 DateTime 對象
$sunsetTime = new DateTime();
$sunsetTime->setTimestamp($sunsetTimestamp);

// 計算當前時間與日落時間的差距
$interval = date_diff($currentTime, $sunsetTime);

// 判斷是還有時間還是已經日落
if ($sunsetTime > $currentTime) {
    echo "距離日落還有 " . $interval->h . " 小時 " . $interval->i . " 分鐘。";
} else {
    echo "日落已經過去了 " . $interval->h . " 小時 " . $interval->i . " 分鐘。";
}
?>

輸出示例:

 距離日落還有 2 小時 34 分鐘。

或者如果已經日落:

 日落已經過去了 1 小時 12 分鐘。

注意事項:

  1. date_sunset()需要提供經緯度參數,不同地區的值會影響計算結果;

  2. 函數中的date("Z") / 3600用於動態獲取當前服務器的時區偏移,確保結果準確;

  3. date_diff()返回的是DateInterval對象,其中的hi屬性代表小時和分鐘部分。