2020.06.08 コーディング
【初心者向けWordPress】日付が1日ズレる!?デイトピッカーの罠
こんにちは。餃子にタレつけない派のWebクリエイター、矢口です。
先日WordPressのカスタムフィールドでデイトピッカーを使用した際、なぜか1日前の日付が表示されるという不具合が発生しました。
ソースコードがデロ●アンに乗っちゃったのかと思ったのですが、よくよく調査してみるとWordPress5.3のアップデートの影響のようです。
調査のため、5.3アップデート時のWordPress公式サポートページで関係ありそうな部分を翻訳してみました。
要約すると、
- 時間を扱うコードが10年以上前の古いものだったからアップデートしたよ
- プラグインやテーマには古いコードの時の動きをしちゃうものがあるよ(「date_default_timezone_set」とか!)
- 時間はUTCで計算されるから、タイムゾーン変更しちゃうと間違った計算になっちゃうよ
こんな感じでしょうか。詳しい内容が知りたい方は公式ページをご覧ください。
ここで怪しいのが、上記にもちょろっと書いた「date_default_timezone_set」関数ですね。
デフォルトのタイムゾーンを変更できる関数です。
怪しいのでひとまずfunctions.phpを見てみましょう。
思いっきりいる
上記で書いた通り、タイムゾーンを変更すると計算が狂ってしまいます。
つまり完全にこいつが戦犯ですね。容赦なく消します。
正しい表示になりました!
date_default_timezone_setでタイムゾーンを日本に設定していたため、標準時間(UTC)と-9時間の誤差が生じていたんですね。。
ちなみに、タイムピッカー・デイトタイムピッカーでも同様の現象が見られました。
もしデイトピッカーがバッ●トゥザフュー●ャーしちゃった。。という方はfunctions.phpを覗いて、date_default_timezone_set関数の有無を確認してみてください!
それでは。