ワードプレスのdate_i18nとstrtotimeを併用すると時間がずれる問題が起こる原因と対策を解説いたします。

date_i18nとstrtotimeを併用

下記のコードは現在時間から一時間後の時間を取得したい場合のコードです。
このようなコードを使用すると本来ほしいUNIX時間と9時間ずれます

※UNIX時間とは1970年からの経過時間(秒)の数値の事です

$string = date_i18n('Y-m-d H:i:s') . " +1 hour";
$time = strtotime($string);
echo $time;//1時間先ではなく、1時間+9時間先にずれたのUNIX TIME世界標準時を返す

これは、date_i18nがローカルの時間を取得する関数であり、それをstrtotimeという世界標準時(GMT)のUNIX時間を返す関数に入れると日本の場合9時間先のUNIX時間になってしまうためです。

1時間先のUNIX時間(世界標準時)を取得するには下記のようなコードにします。

$string = date_i18n('Y-m-d H:i:s') . " +1 hour";
$mytimezone = wp_timezone_string();
$date = new DateTime($string, new DateTimeZone($mytimezone));
$date->setTimezone(new DateTimeZone("UTC"));
echo $date->getTimestamp();

このコードでは、まずワードプレスのローカル時間設定の文字列を wp_timezone_string()で取得し、 new DateTimeでそれを指定の上、ローカル時間のDateTImeを初期化したうえで、

$date->setTimezone(new DateTimeZone(“UTC”)); によって世界標準時に変換し、

$date->getTimestamp()でUNIX時間を出力します。この場合、世界標準時の1時間後のUNIXTIMEが正しく出力されます。

date_i18nに世界標準時のUNIX時間を渡してはいけない

ちなみに

date_i18n('Y-m-d H:i:s',世界標準時のUNIXTIME); 

というコードを使うと、9時間前の時間が出力されてしまいます。

date_i18n('Y-m-d H:i:s',ローカル時間のUNIXTIME);

というコードで正しいローカル時間が出力されます。

WordPress ワードプレスのテーマやプラグインのカスタマイズ修正、機能追加のご依頼・ご相談はワードプレスドクターまでお気軽にお送りください