MENU

WordPressの現在日時取得で時間がずれる時の解決法

WordPressでMW WP Formを使用してお問い合わせフォームを構築していた際、自動返信メール内で送信日時を設定する必要がありました。
現在日時の取得にdateを使用したのですが、そうすると時間がずれてしまう現象が起きました。
現在時刻からちょうど-9時間ずれており、どうやらUTCの時刻が返ってきているようでした。

原因

調べてみるとWordPressのコアファイルであるwp-settings.php内でdate_default_timezone_setにUTCがセットされており、これによって時間がずれてしまうようです。

wp-settings.phpの該当行に下記のような記述が確認できました。

// WordPress calculates offsets from UTC.
date_default_timezone_set( 'UTC' );

該当箇所を修正するのも一つの手ではありますが、アップデートする度に更新されてしまう場所なので、現実的ではありません。かといってdateを使用する度にdate_default_timezone_set( 'Asia/Tokyo' )とするのも冗長で憚られます。

解決法

WordPressではdate_i18nというローカル日時を扱う関数が用意されており、こちらを使用します。

現在日時を取得したい箇所で下記のように記述します。

echo date_i18n( "Y-m-d H:i:s" );

これでローカルの現在日時が取得できます。