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は、「2025年4月26日」を「26 Avril 2025」(フランス語形式)に変えるなど、言語習慣に従って日付を自動的にフォーマットできます。
Webサイトでユーザーが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と組み合わせて使用できます。
ロケールとタイムゾーンを正しく設定することを忘れないでください。
ユーザーが言語を動的に切り替えることができるようにすると、ユーザーエクスペリエンスが大幅に向上する可能性があります。
これを理解している限り、同様の日付時間関数( date_sunrise()など)も同じ方法で国際化することができます。