當前位置: 首頁> 最新文章列表> date_sunset() 與DateTimeZone 配合實現多地日落時間比較

date_sunset() 與DateTimeZone 配合實現多地日落時間比較

M66 2025-05-31

在許多應用場景中,了解不同城市的日落時間是一個常見需求。 PHP 提供了date_sunset()函數,該函數可以計算指定位置的日落時間。結合DateTimeZone類,我們可以輕鬆實現多個城市的日落時間比較。本文將通過示例代碼,介紹如何用date_sunset()配合DateTimeZone實現這一功能。

1. 使用date_sunset()函數

date_sunset()函數是PHP 內置的一個非常方便的日期和時間函數,用於獲取指定地點的日落時間。它的基本語法如下:

 date_sunset(int $timestamp, int $format = SUNFUNCS_RET_STRING, float $latitude = 0, float $longitude = 0, float $zenith = 90.83, float $gmt_offset = 0)
  • $timestamp :指定的時間戳。

  • $format :返回格式,可以是SUNFUNCS_RET_STRINGSUNFUNCS_RET_TIMESTAMPSUNFUNCS_RET_DOUBLE等。

  • $latitude$longitude :指定位置的經緯度。

  • $zenith :太陽的天文位置,默認為90.83(即天文的日落點)。

  • $gmt_offset :時區的偏移量。

2. 配合DateTimeZone類使用

為了更精確地獲取各地的日落時間,我們可以使用PHP 的DateTimeZone類,它允許我們指定不同的時區。通過將時區與date_sunset()函數結合使用,我們能夠計算出準確的日落時間。

3. 代碼示例:比較多個城市的日落時間

下面的PHP 代碼示例演示瞭如何使用date_sunset()配合DateTimeZone類來比較不同城市的日落時間。示例中我們選擇了紐約、倫敦和北京三個城市進行比較。

 <?php
// 定義城市的經緯度和時區
$locations = [
    'New York' => [
        'latitude' => 40.7128,
        'longitude' => -74.0060,
        'timezone' => 'America/New_York'
    ],
    'London' => [
        'latitude' => 51.5074,
        'longitude' => -0.1278,
        'timezone' => 'Europe/London'
    ],
    'Beijing' => [
        'latitude' => 39.9042,
        'longitude' => 116.4074,
        'timezone' => 'Asia/Shanghai'
    ]
];

// 當前時間戳
$timestamp = time();

// 輸出各城市日落時間
foreach ($locations as $city => $info) {
    // 獲取時區對象
    $timezone = new DateTimeZone($info['timezone']);
    
    // 計算該城市的日落時間
    $sunset = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $info['latitude'], $info['longitude']);
    
    // 創建 DateTime 對象並設置時區
    $sunset_time = new DateTime("@$sunset");
    $sunset_time->setTimezone($timezone);
    
    // 格式化輸出日落時間
    echo "The sunset time in $city is: " . $sunset_time->format('Y-m-d H:i:s') . " (" . $info['timezone'] . ")\n";
}
?>

4. 代碼說明

  • 我們定義了三個城市及其經緯度和時區。通過DateTimeZone類來獲取每個城市的時區對象,確保計算的日落時間是基於當地時間的。

  • 使用date_sunset()函數計算每個城市的日落時間。這個函數返回的是Unix 時間戳格式的結果。

  • 我們通過創建DateTime對象並使用setTimezone()方法來設置正確的時區,然後格式化輸出為Ymd H:i:s的日期時間格式。

5. 結果輸出

假設當前時間為2025 年4 月26 日12:00:00 UTC,程序將輸出類似以下內容:

 The sunset time in New York is: 2025-04-26 19:50:00 (America/New_York)
The sunset time in London is: 2025-04-26 20:10:00 (Europe/London)
The sunset time in Beijing is: 2025-04-26 19:30:00 (Asia/Shanghai)

通過這種方式,我們可以輕鬆地比較不同城市的日落時間,並且輸出格式靈活、準確。