現在の位置: ホーム> 最新記事一覧> NL_LANGINFO()AM/PMタイムスタンプの取得の使用例

NL_LANGINFO()AM/PMタイムスタンプの取得の使用例

gitbox 2025-05-27

PHPでは、 NL_LANGINFO()関数は、日付、時刻形式などの現在の環境のローカライズされた情報を取得するために使用されます。この関数は、システムのロケールに依存し、週名、月名、日付形式などのさまざまなローカライズされた文字列を返すことができます。

ただし、AM/PM ID(つまり、AM/PMのローカライズされた文字列)を取得するために、 NL_LANGINFO()は直接定数を提供しません。多くの開発者は、どのようにしてnl_langinfo()を使用して、AM/PMのローカライズされた識別子を取得できるのだろうかと疑問に思うでしょうか?

NL_LANGINFO()に直接AM/PMオプションがないのはなぜですか?

nl_langinfo()のパラメーター定数は、基礎となるシステムのCライブラリから定義されています。標準のNL_LANGINFO定数には、AM/PM識別子の直接列挙は含まれていません。次のような一般的な定数:

  • abday_1からabday_7 :週の略語名

  • day_1 to day_7 :週のフルネーム

  • abmon_1からabmon_12 :略語月名

  • Mon_1からMon_12 :月額名

  • AM_STRおよびPM_STR :一部のシステムはこれら2つの定数をサポートしていますが、すべてのシステムがそれらをサポートするわけではありません。

したがって、システムのCライブラリとロケールサポートの場合、 AM_STRおよびPM_STR定数を使用してAMおよびPM識別子を取得できます。それ以外の場合は、 nl_langinfo()で取得することはできません。

PHPのAM_STRおよびPM_STR

PHPのNL_LANGINFO()は、基礎となるシステムのローカリゼーションライブラリがそれらをサポートするため、着信AM_STRおよびPM_STR定数をサポートしています。定義()を使用して判断できます。

 if (defined('AM_STR') && defined('PM_STR')) {
    echo "AM ロゴ: " . nl_langinfo(AM_STR) . PHP_EOL;
    echo "PM ロゴ: " . nl_langinfo(PM_STR) . PHP_EOL;
} else {
    echo "現在のシステムはそれをサポートしていません AM_STR または PM_STR 絶え間ない。";
}

システムがサポートすると、ローカライズされた朝と午後のロゴが出力されます。たとえば、英語システムは「AM」と「PM」を表示し、中国のシステムは「AM」と「午後」を表示する場合があります。

コードの例

次の例は、地域のセットアップ、AM/PM IDを取得して出力する方法を示しています。

 <?php
// エリアをセットアップします(必要に応じて適切に変更しますlocale)
setlocale(LC_TIME, 'zh_CN.UTF-8');

// それがそれをサポートするかどうかを判断します AM_STR そして PM_STR
if (defined('AM_STR') && defined('PM_STR')) {
    $am = nl_langinfo(AM_STR);
    $pm = nl_langinfo(PM_STR);

    echo "AM ロゴ: " . $am . PHP_EOL;
    echo "PM ロゴ: " . $pm . PHP_EOL;
} else {
    echo "現在のシステムはそれをサポートしていません AM_STR または PM_STR 絶え間ない,取得できません AM/PM ロゴ。" . PHP_EOL;
}

EN_US.UTF-8ZH_CN.UTF-8などのサーバー環境に従ってSetLocaleのパラメーターを変更して、対応するロケールのAM/PM識別子を取得することができます。

注意すべきこと

  • SetLocale()は、スクリプト全体のローカリゼーション環境に影響を与え、環境が対応するロケールを正しくインストールしていることを確認します。

  • すべてのシステムがAM_STRPM_STRをサポートしているわけではありません。特にWindowsプラットフォームで。

  • システムがサポートしていない場合は、AM/PM IDを手動定義に置き換えることを検討できます。


より詳細なロケール設定と時間形式の処理が必要な場合は、 intldateformatterまたはサードパーティライブラリを組み合わせて、より柔軟なローカライズされた時間形式のサポートを取得することもできます。