當前位置: 首頁> 最新文章列表> 如何讓date_sunset() 支持國際化顯示時間

如何讓date_sunset() 支持國際化顯示時間

M66 2025-06-04

在PHP 中, date_sunset()函數可以根據經緯度和日期計算出日落時間。它返回的是一個UNIX 時間戳或者格式化好的時間字符串。然而,這個函數本身並不直接支持多語言輸出或者不同的國際化(i18n)時間格式。那麼,如何讓date_sunset()支持多語言和本地化顯示呢?本文將一步步帶你實現。

1. 基礎用法回顧

首先了解一下date_sunset()的基本用法:

 <?php
$timestamp = strtotime('2025-04-26');
$latitude = 37.7749;  // 例如:舊金山
$longitude = -122.4194;

$sunset = date_sunset(
    $timestamp,
    SUNFUNCS_RET_TIMESTAMP,
    $latitude,
    $longitude,
    90,
    0
);

echo date('H:i:s', $sunset);
?>

上面的代碼會輸出日落時間,但時間格式是固定的,需要手動格式化。而且沒有考慮語言環境。

2. 改造成支持多語言和國際化時間格式

要做到多語言和國際化,我們可以結合使用PHP 的IntlDateFormatter類,這是intl擴展提供的強大工具。

首先,確保你的服務器安裝了intl擴展。如果沒有,可以參考這里安裝: https://www.m66.net/php-intl-install-guide

下面是完整改進版的代碼示例:

 <?php
$timestamp = strtotime('2025-04-26');
$latitude = 37.7749;   // 緯度
$longitude = -122.4194; // 經度

// 獲取日落時間戳
$sunset = date_sunset(
    $timestamp,
    SUNFUNCS_RET_TIMESTAMP,
    $latitude,
    $longitude,
    90,
    0
);

// 設定語言和地區,例如法語法國
$locale = 'fr_FR'; // 可以改成 'zh_CN'、'en_US'、'de_DE' 等

// 設定時區
$timezone = 'Europe/Paris'; // 根據需要設定正確時區

// 創建格式化器
$formatter = new IntlDateFormatter(
    $locale,
    IntlDateFormatter::FULL,
    IntlDateFormatter::SHORT,
    $timezone,
    IntlDateFormatter::GREGORIAN
);

// 格式化日落時間
$localizedSunset = $formatter->format($sunset);

echo "日落時間(本地化): " . $localizedSunset;
?>

解釋一下:

  • locale控制輸出的語言,比如中文、法語、德語等。

  • timezone控制輸出的時區,確保時間正確。

  • IntlDateFormatter可以根據語言習慣自動格式化日期,比如把“26 April 2025”變成“26 avril 2025”(法語格式)。

3. 動態切換語言示例

如果你的網站允許用戶選擇語言,比如從URL 參數里傳語言代碼,可以這樣做:

 <?php
$locale = isset($_GET['lang']) ? $_GET['lang'] : 'en_US';

$formatter = new IntlDateFormatter(
    $locale,
    IntlDateFormatter::FULL,
    IntlDateFormatter::SHORT,
    'UTC',
    IntlDateFormatter::GREGORIAN
);

$sunset = date_sunset(
    strtotime('2025-04-26'),
    SUNFUNCS_RET_TIMESTAMP,
    37.7749,
    -122.4194,
    90,
    0
);

echo $formatter->format($sunset);
?>

如果訪問: https://www.m66.net/sunset.php?lang=de_DE ,就會看到德語格式的日落時間。

4. 小技巧:格式定制

如果你想完全自定義輸出格式,比如只顯示小時分鐘,可以進一步指定自定義模式:

 $formatter = new IntlDateFormatter(
    'zh_CN',
    IntlDateFormatter::NONE,
    IntlDateFormatter::NONE,
    'Asia/Shanghai',
    IntlDateFormatter::GREGORIAN,
    'HH:mm'
);

這段設置會輸出像18:45這樣的時間格式,非常適合移動端或需要簡潔界面的時候。

總結

  • date_sunset()本身不支持多語言和國際化,但可以結合IntlDateFormatter使用。

  • 記得正確設置localetimezone

  • 允許用戶動態切換語言能大大提升用戶體驗。

只要理解了這一點,類似的日期時間函數(比如date_sunrise() )也可以用同樣的方式國際化。