[WordPress]どうにもややこしい、時間取得のメモ

最終更新: 2022/08/01/公開: 2022/08/01

結論:wp_time()を使う

例えば今日を取得したいときは下記のようにする。

$today = wp_time('Y-m-d');

落とし穴(というか確認不足)

1)DateTime()で引数なしで取得した場合にUTCで取得されるのわかってない

DateTime()で本日を取得した場合は、指定しなければUTCで取得される…という基本を把握してなくてミスった。
WP一般設定のタイムゾーンが「東京」でもUTCになる。
※後述、引用内の「システムにタイムゾーンが設定されている」状態ではない

下記のサイトにあるように引数でタイムゾーン指定すれば日本の時間で出る。
でも一般設定と連動させたほうが便利だと思うのでWP内ではwp_date使ったほうが良いんじゃないかと思う

$dt = new DateTime(‘now’, new DateTimeZone(‘GMT’)); // タイムゾーンを GMT に設定
$dt = new DateTime(‘now’, new DateTimeZone(‘Asia/Tokyo’)); // タイムゾーンを東京 (GMT+09:00) に設定
$dt = new DateTime(‘now’); // システムにタイムゾーンが設定されているならこれでも OK

DateTime クラスで時刻を扱う – まくまくPHPノート

一応検証した。

ウム……

2)PHPでタイムゾーンを設定するとACFのデイトピッカーがずれる

※これはACF常用者以外関係がない項目

やっちゃいけないんだけども date_default_timezone_set()を使って上記1を解決しようとすると、ACFのデイトピッカーで取ってきた値が1日ずれてしまうという二重のエラーが発生する。

meta_queryで日付比較している場合なんかは致命的なのでタイムゾーンの再設定は避けるようにする。