在PHP 中, date_sunset()函數可以根據經緯度和日期計算出日落時間。它返回的是一個UNIX 時間戳或者格式化好的時間字符串。然而,這個函數本身並不直接支持多語言輸出或者不同的國際化(i18n)時間格式。那麼,如何讓date_sunset()支持多語言和本地化顯示呢?本文將一步步帶你實現。
首先了解一下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);
?>
上面的代碼會輸出日落時間,但時間格式是固定的,需要手動格式化。而且沒有考慮語言環境。
要做到多語言和國際化,我們可以結合使用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”(法語格式)。
如果你的網站允許用戶選擇語言,比如從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 ,就會看到德語格式的日落時間。
如果你想完全自定義輸出格式,比如只顯示小時分鐘,可以進一步指定自定義模式:
$formatter = new IntlDateFormatter(
'zh_CN',
IntlDateFormatter::NONE,
IntlDateFormatter::NONE,
'Asia/Shanghai',
IntlDateFormatter::GREGORIAN,
'HH:mm'
);
這段設置會輸出像18:45這樣的時間格式,非常適合移動端或需要簡潔界面的時候。
date_sunset()本身不支持多語言和國際化,但可以結合IntlDateFormatter使用。
記得正確設置locale和timezone 。
允許用戶動態切換語言能大大提升用戶體驗。
只要理解了這一點,類似的日期時間函數(比如date_sunrise() )也可以用同樣的方式國際化。