WordPress 5.3 で日時まわりの仕組みが見直され、日時の取得や変換には wp_date() と current_datetime() を使うよう案内されています。date_i18n() や current_time( 'timestamp' ) は互換性のために残されていますが、新しく書くコードでは使わないほうが安全です。
この記事では、よく使う「現在の日時の取得」と「unixtime と日時の相互変換」を、実際に動かした結果とあわせてまとめます。例は、サイトのタイムゾーンを「東京(Asia/Tokyo)」にしている場合です。
1.現在のunixtimeを取得する
|
1 2 |
time(); // 1789839552 wp_date( 'U' ); // 1789839552(同じ値) |
unixtime は世界共通の値で、タイムゾーンの影響を受けません。time() で十分です。
2.現在の日時(日本時間)を取得する
|
1 2 |
wp_date( 'Y-m-d H:i:s' ); // 2026-09-20 02:39:12 current_datetime()->format( 'Y-m-d H:i:s' ); // 2026-09-20 02:39:12(同じ値) |
current_datetime() はサイトのタイムゾーンを持った DateTimeImmutable を返すので、「1日後」「月末」などの日付計算をするときに便利です。
3.unixtime から日時に変換する
|
1 |
wp_date( 'Y-m-d H:i:s', 1658937224 ); // 2022-07-28 00:53:44 |
第2引数に unixtime を渡すと、サイトのタイムゾーンの日時に変換されます。
4.日時から unixtime に変換する
WordPress には「日時を unixtime に戻す」専用の関数がありません。PHP の DateTime に、サイトのタイムゾーン(wp_timezone())を渡して変換します。
|
1 |
( new DateTime( '2022-07-28 00:53:44', wp_timezone() ) )->getTimestamp(); // 1658937224 |
タイムゾーンを new DateTimeZone( 'Asia/Tokyo' ) と直接書いても同じ結果になります。wp_timezone() を使えば、管理画面でタイムゾーンを変えてもコードを直す必要がありません。
5.注意:date_i18n( ‘U’ ) や strtotime() は9時間ずれる
以前は、現在の unixtime を date_i18n( 'U' ) で取得しているコードをよく見かけました。これを置き換えようとして strtotime( wp_date( 'Y-m-d H:i:s' ) ) と書くと、たしかに同じ値になります。ただし、どちらも本来の unixtime より9時間(32400秒)進んだ値です。
|
1 2 3 4 |
time(); // 1789839552(正しい値) date_i18n( 'U' ); // 1789871952(+32400) strtotime( wp_date( 'Y-m-d H:i:s' ) ); // 1789871952(+32400) current_time( 'timestamp' ); // 1789871952(+32400) |
WordPress は PHP のデフォルトのタイムゾーンを UTC に固定しています。そのため strtotime() は、日本時間の日時を UTC の日時として解釈してしまいます。
既存のコードがこの「9時間ずれた値」を前提に作られているなら、strtotime( wp_date( 'Y-m-d H:i:s' ) ) に置き換えても動作は変わりません。新しく書くコードでは、1〜4の方法で正しい unixtime を扱ってください。
