當前位置: 首頁> 最新文章列表> 比較用date_sunset多個城市日落時間並排序展示

比較用date_sunset多個城市日落時間並排序展示

M66 2025-05-30

在PHP 中, date_sunset()函數可以用來獲取指定位置的日落時間。通過使用這個函數,我們可以輕鬆地比較多個城市的日落時間,並按順序展示它們。本文將介紹如何通過PHP 獲取不同城市的日落時間,並將這些時間按照從早到晚的順序進行排列。

1. date_sunset()函數簡介

date_sunset()是一個用於獲取日落時間的PHP 內置函數。它的基本語法如下:

 date_sunset(time, format, latitude, longitude, zenith, gmt_offset);
  • time : 當前時間的Unix 時間戳,通常使用time()函數獲取。

  • format : 返回時間的格式,可以是SUNFUNCS_RET_TIMESTAMP (返回時間戳), SUNFUNCS_RET_STRING (返回字符串格式),或者SUNFUNCS_RET_DOUBLE (返回浮動的小時數)。

  • latitude : 目標城市的緯度。

  • longitude : 目標城市的經度。

  • zenith : 日落的標準高度,一般為90.5 度(即太陽接觸地平線時)。

  • gmt_offset : 時區的偏移量,通常為0 或其他時區的偏移。

2. 獲取多個城市的日落時間

我們可以為每個城市定義它們的經緯度,並使用date_sunset()函數獲取其日落時間。假設我們要獲取以下城市的日落時間:北京、紐約和倫敦。

以下是獲取日落時間的示例代碼:

 <?php
// 定義每個城市的經緯度
$cities = [
    "Beijing" => ['latitude' => 39.9042, 'longitude' => 116.4074],
    "New York" => ['latitude' => 40.7128, 'longitude' => -74.0060],
    "London" => ['latitude' => 51.5074, 'longitude' => -0.1278]
];

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

// 存儲每個城市的日落時間
$sunset_times = [];

foreach ($cities as $city => $coords) {
    // 獲取每個城市的日落時間,格式為時間戳
    $sunset_timestamp = date_sunset($current_time, SUNFUNCS_RET_TIMESTAMP, $coords['latitude'], $coords['longitude']);
    // 將城市和日落時間存儲到數組中
    $sunset_times[$city] = $sunset_timestamp;
}

// 對日落時間進行排序
asort($sunset_times);

// 輸出排序後的結果
echo "各城市日落時間(按順序):\n";
foreach ($sunset_times as $city => $sunset) {
    echo $city . " 的日落時間是: " . date("Y-m-d H:i:s", $sunset) . "\n";
}
?>

3. 代碼解釋

  1. 定義城市和經緯度:我們為每個城市指定了一個數組,包含了該城市的緯度和經度信息。

  2. 獲取當前時間:通過time()獲取當前的Unix 時間戳,用於計算日落時間。

  3. 循環獲取日落時間:使用date_sunset()函數為每個城市計算日落時間。注意,這裡使用了SUNFUNCS_RET_TIMESTAMP格式來返回一個時間戳,便於後續排序。

  4. 排序日落時間:通過asort()函數按日落時間對數組進行升序排序。

  5. 輸出結果:最後,通過date()函數將時間戳轉換為可讀的日期時間格式,並按順序輸出每個城市的日落時間。

4. 輸出示例

假設當前的時間是2025-04-26 ,運行上述代碼後,輸出的結果將會類似於:

 各城市日落時間(按順序):
New York 的日落時間是: 2025-04-26 19:52:00
London 的日落時間是: 2025-04-26 20:12:00
Beijing 的日落時間是: 2025-04-26 18:45:00

5. 注意事項

  • date_sunset()返回的時間是基於UTC 的,確保在顯示結果時轉換為本地時間。

  • 如果你需要支持多個時區的顯示,可以通過date_default_timezone_set()函數來設置時區。

  • 經緯度和時區的精確度會影響結果的準確性,因此要確保使用準確的城市坐標。