WordPress wp_date date_i18n の違い

date()、date_i18n()、wp_date() それぞれの違いを見てみましょう

タイムスタンプを生成します。

mktime(13, 0, 0, 5, 2, 2023); は “1683032400”になります。

これをフォーマット’Y-m-d H:i:s T U Z’ で表示させます。

[printDate time=”1683032400″]

echo date('Y-m-d H:i:s T U Z', 1683032400);

[printDateI18n time=”1683032400″]

echo date_i18n('Y-m-d H:i:s T U Z', 1683032400);

[printWpDate time=”1683032400″]

echo wp_date('Y-m-d H:i:s T U Z', 1683032400);

wordpressは内部的にはUTCで動作しています。なので mktime から作った時間はUTCです。
もちろん、time() strtotime() もUTCです。
なので wp_date() は正しく 9時間後の日時の「2023-05-02 22:00:00」を表示しています。
WordPress 5.3 以前に使われていた date_i18nは互換性の為残されているそうですが
少しおかしいですね。
UTCと同じ時刻「2023-05-02 13:00:00」表示していて、タイムスタンプが減らされています。
タイムスタンプに 1683032400 を設定したのに 1683000000 になっています、
何か複雑な感じがします。

単純にタイムスタンプを日時に直すにはwp_date()を使うのが良さそうです。

しかしタイムスタンプで比較したい場合もあると思います。
そんな時には正しい日時で有れば strtotime(‘正しい日時 JST’) JSTを付ければJSTのタイムスタンプになります。
正しい日時というのは 2月30日とか 25時30分 とかはダメって事です。
そういう物を扱いたい場合はmktime() で作り -32400 して下さい。 – wp_date(‘Z’) でもOKです。
日本以外の国に持って行ったとき時間がおかしくなるので wp_date(‘Z’)を引いた方が良いですね。

上記で使ったショートコードを以下に置いておく。function.php に置いておけば使える。

使い方は同じで パラメーターは 2つ format と timeがある。 なにも入れないと現時間と上で使ったフォーマットになる。

[printDate time="タイムスタンプ" format="フォーマット" ] or
[printDate]
function printDate($params = array())
{
    $atts = shortcode_atts(array('time' => time(), 'format' => 'Y-m-d H:i:s T U Z'), $params);
    return date($atts['format'], $atts['time']);
}
add_shortcode('printDate', 'printDate');

function printDateI18n($params = array())
{
    $atts = shortcode_atts(array('time' => time(), 'format' => 'Y-m-d H:i:s T U Z'), $params);
    return date_i18n($atts['format'], $atts['time']);
}
add_shortcode('printDateI18n', 'printDateI18n');

function printWpDate($params = array())
{
    $atts = shortcode_atts(array('time' => time(), 'format' => 'Y-m-d H:i:s T U Z'), $params);
    return wp_date($atts['format'], $atts['time']);
}
add_shortcode('printWpDate', 'printWpDate');

コメント

タイトルとURLをコピーしました