Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@ki6ool

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

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

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ki6ool
絶対ワードプレス使うマン

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?