SEOノウハウ・副業ブログ・ワードプレス

WordPressの日付・時刻の取得【unixtimeとローカル時刻の取得】

unixtimeと日本のローカル時刻では、9時間の違いがあります。

WordPressでどの関数でどの日時を取得できるかを知っておかないと、日付データの設定する時にうまくいきません。

WordPressでdate関数を使った日時の取得やunixtimeやローカル時刻について、まとめて紹介します。

WordPressで日時が重要な理由

スケジュール登録(wp_schedule_event)などを使う時は、unixtimeとローカル時刻の9時間の差を考慮する必要があります。

どの関数で何を取得できるかが重要です。

ローカル時刻を取得する方法は下記の方法があります。

ローカル時刻を取得する方法

  • date関数で+9時間する
  • タイムゾーンを東京にする
  • date_i18nを使う

date関数でローカル時刻を取得する

WordPressで使うPHPのdate関数では、通常だとunixtimeが返ります(UTC)。

ローカル時刻(日本時間)を返したいなら、UTCに+9時間が必要です。

//ローカル時刻(UTC+9)が返る
date('Y-m-d H:i:s', strtotime('+9hour'));

もう一つ、date_default_timezone_set関数を使って、date関数でローカル時刻を取得する方法があります。

※取得後に、タイムゾーンを戻す作業が必要です。

//ローカル時刻(UTC+9)が返る
date_default_timezone_set( 'Asia/Tokyo' );
date('Y-m-d H:i:s');
date_default_timezone_set( 'UTC' );

WordPressの関数でローカル時刻を取得する

WordPressが提供している関数でローカル時刻を取得できます。

//ローカル時刻(UTC+9)が返る
date_i18n('Y-m-d H:i:s');

WordPressの時刻【まとめ】

主要な関数を使った日付の確認です。

var_dump(get_the_time('Y-m-d H:i:s', 922));
//string(19) "2021-06-15 13:51:00"

var_dump(get_the_time('U', 922));
//int(1623765060)

var_dump(date('Y-m-d H:i:s'));
//string(19) "2022-01-18 00:38:19"

var_dump(date('Y-m-d H:i:s', strtotime('+9hour')));
//string(19) "2022-01-18 09:38:19"

//タイムゾーンの変更
date_default_timezone_set( 'Asia/Tokyo' );
var_dump(date('Y-m-d H:i:s'));
//string(19) "2022-01-18 09:38:19"

var_dump(date('Y-m-d H:i:s', strtotime('-9hour')));
//string(19) "2022-01-18 00:38:19"

var_dump(date('Y-m-d H:i:s', strtotime('-32400sec')));
//string(19) "2022-01-18 00:38:19"
//タイムゾーンの戻し
date_default_timezone_set( 'UTC' );

var_dump(date_i18n('Y-m-d H:i:s'));
//string(19) "2022-01-18 09:38:19"

var_dump(date_i18n('Y-m-d H:i:s', strtotime('-9hour')));
//string(19) "2022-01-17 15:38:19"

var_dump(date_i18n('Y-m-d H:i:s', strtotime('-32400sec')));
//string(19) "2022-01-17 15:38:19"

date_i18nとstrtotimeに注意

上記のvar_dumpから分かる通り、date_i18n関数は、strtotimeで時間を引くとおかしくなってしまいます。

Codexには、strtotimeが使えそうなサンプルコードがありますが、-9hourみたいな書式は使えないので注意が必要です。

※date関数は正常に動きます。

wp_schedule_eventで登録する日時

wp_schedule_eventは、unixtime(UTC)で設定が必要です。

例えば、

「2022-01-18 09:30:00」

にスケジュールを実行したいのであれば、

「2022-01-18 00:30:00」

をunixtimeに変換して設定が必要です。

  • B!