LoginSignup
7
5

More than 3 years have passed since last update.

[WordPress]v5.3から日付の表示が変わったので

Last updated at Posted at 2019-12-06

2020-05-26追記>

date_i18n()は非推奨らしくwp_date()を使えとのこと。
wp_date()の方が処理も速いらしい。
WordpressのデフォルトのタイムゾーンはUTCなのでそれを元に考えなくてはならない。

とりあえず 管理画面>設定でタイムゾーンを東京に。

/* 現在時刻=timestamp指定しない場合 */
wp_date('Y-m-d H:i:s')
//正 2020-05-26 18:00:00

date('Y-m-d H:i:s')
//誤 2020-05-26 09:00:00
//date()だとUTCの時間になる

/* strtotime()つかう場合 */
//そのままdate()を使う
date('Y-m-d H:i:s', strtotime('2020-05-26 18:00:00'))
//正 2020-05-26 18:00:00

wp_date('Y-m-d H:i:s', strtotime('2020-05-26 18:00:00'))
//誤 2020-05-27 03:00:00

/* タイムスタンプ指定 */
wp_date('Y-m-d H:i:s', 1590483600)
//正 2020-05-26 18:00:00

date('Y-m-d H:i:s', 1590483600)
//誤 2020-05-26 18:00:00


strtotime('2020-05-26 18:00:00')
//1590516000
//このタイムスタンプは日本時間では 2020/05/27 03:00:00

【結論】
wp_date()を使う。strtotime()経由の場合は第3引数に 'Asia/Tokyo' 指定
投稿の日時に関しては下記の通りget_the_time()
でよろしいか?

<2020-05-26追記

管理画面>設定>一般 のタイムゾーンは「東京」

functions.php
date_default_timezone_set('Asia/Tokyo');

を記載した状態。

2020.04.03追記

php.ini
date.timezone = "Asia/Tokyo"

と設定している場合、重複するのでずれるらしいことがv5.4で追加されたサイトヘルスにより判明。
よってどちらかのみに記載する。というかphp.iniだけに書けば下記のようなことにならない。

screenshot.png

とりあえず旧クラシックエディターでは表示される、
公開日時とその編集用フォームの値が一致しなくなる(上記画像参照)
正しいのはフォームの値。
ブロックエディター使えってことなのかな。使いたくないんだが。
ここのテンプレートは/wp-admin か/wp-includes 以下のやつなんで編集できない。
フィルターがあれば変えれるやろうけど今はまだめんどくさいのでそのうちに調べる。

画像につかった 2019-12-01 00:00:00 (日曜日)の投稿を元に各関数の表示をまとめておく。

------------
WP関数
------------

echo get_the_time('Y年m月d日(D) H:i:s', $post);
// 2019年12月01日(日) 00:00:00 > 正

echo get_the_date('Y年m月d日(D) H:i:s', $post);
// 2019年12月01日(日) 00:00:00 > 正

echo get_post_time('Y年m月d日(D) H:i:s', false, $post);
// 2019年12月01日(Sun) 00:00:00 > 正

echo get_post_time('Y年m月d日(D) H:i:s', true, $post);
// 2019年11月30日(Sat) 00:00:00 > 誤

------------
date()
------------

echo date('Y年m月d日(D) H:i:s', get_the_date('U', $post));
// 2019年12月01日(Sun) 09:00:00 > 誤

echo date('Y年m月d日(D) H:i:s', get_the_time('U', $post));
// 2019年12月01日(Sun) 09:00:00 > 誤

echo date('Y年m月d日(D) H:i:s', get_post_time('U', false, $post));
// 2019年12月01日(Sun) 09:00:00 > 誤

echo date('Y年m月d日(D) H:i:s', get_post_time('U', true, $post));
// 2019年11月30日(Sat) 09:00:00 > 誤

------------
date_i18n() ※WP関数
------------

echo date_i18n('Y年m月d日(D) H:i:s', get_the_date('U', $post));
// 2019年12月01日(日) 00:00:00 > 正

echo date_i18n('Y年m月d日(D) H:i:s', get_the_time('U', $post));
// 2019年12月01日(日) 00:00:00 > 正

echo date_i18n('Y年m月d日(D) H:i:s', get_post_time('U', false, $post));
// 2019年12月01日(日) 00:00:00 > 正

echo date_i18n('Y年m月d日(D) H:i:s', get_post_time('U', true, $post));
// 2019年11月30日(土) 00:00:00 > 誤

WP関数使うならget_the_time()かget_the_date()
タイムスタンプからやるならdate_i18n()
を使えば問題ないと思われ
ほとんどの人は影響ないと思うけど。

で、
strtotime('2019-12-01 00:00:00')
を使う場合、つまり投稿とは関係ない日時を表示する場合

echo date('Y年m月d日(D) H:i:s', strtotime('2019-12-01 00:00:00'));
// 2019年12月01日(Sun) 00:00:00 > 正

echo date_i18n('Y年m月d日(D) H:i:s', strtotime('2019-12-01 00:00:00'));
// 2019年11月30日(土) 15:00:00 > 誤

つーことなんでdate()使っておけば良い。

まとめると本当にほとんどの人には影響なさそう。
私の場合はそもそも
get_the_time('D')で日本の曜日が出ることを知らなんだので
date('w', get_the_date('U', $post)) から置換していたためもろに影響が出た。

また、
Advanced Custom Fieldsの
デイトピッカーとタイムピッカーがもれなくずれるので
(DBの値は変わらないが投稿編集の画面での値がずれる)
しょうがなくテキストフォームに変える。

・関係ありそうなやつリスト
Date/Time component improvements in WordPress 5.3

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5