Advanced Custom Fields(ACF)のデイトピッカ―で1日ずれる
所沢市でホームページ制作や欧州の輸入品販売などを行っているRishunTradingです。
今回も、お客様のホームページ制作中に、はまってしまった内容について記載します。
気付くとお恥ずかしい限りなのですが。
WordPressのプラグイン「Advanced Custom Fields(ACF)」のデイトピッカ―を使った際に、なぜか日付が1日ずれる。
あるお客様のサイトを制作中に、「Advanced Custom Fields(ACF)」のデイトピッカ―から設定した値を、プログラムから取得し、プログラム内で処理をしていた際になぜか日付がずれる事象が発生しました。
こちらのお客様では、あるサービスの終了日に使用していたのですが、そのずれのため、正常に動作する時と正常に動作しない時があり、動作が不安定な事象が起きていました。
あれやこれや調べていたのですが、根本原因に辿りづけず、改めて期限日を確認すると、9時間のずれが起きている事がわかりました。
9時間のずれで分かった事。
9時間のずれが分かったことで、原因に気付く事ができました。
「デイトピッカ―から設定した値の日付」と、「本日の日付」を比較して「サービスの終了日」を判断していたのですが、タイムゾーンの考慮に漏れがありました。
今回、本日の日付を取得する際に、PHPの「date()関数」を使用していたのですが、Wordpressの場合、タイムゾーンは、設定画面から設定したタイムゾーン(日本ならば、“Asia/Tokyo”など)となりますが、このdate関数を利用した場合は、タイムゾーンは、“UTC”になります。そのため、当然ですが、タイムゾーンが異なるため、9時間のずれが起きていました。
修正方法について
date関数のタイムゾーンを変えるために、PHPのfunctionである「date_default_timezone_set( ‘Asia/Tokyo’ );」を使ってタイムゾーンを変えれば良いのですが、Wordpressでは、PHPの「date_default_timezone_set」を使って変更する事は推奨していません。
当然ですが、2つのタイムゾーンの設定値を持つ事になってしまいます。
そのため、Wordpress5.3以降に、日付用のfunctionとして、Wordpressから「wp_date」が提供されています。
今回は、この「wp_date」を使って解決しました。
以下、今回の処理の該当箇所
1 2 3 4 5 6 7 8 9 10 | //--- start --- $item_finishdate = get_field('item_finishdate', $post->ID, true); $finishdate = new DateTime($item_finishdate); $show_finishdate = $finishdate->format('Y年m月d日 G:i'); //表示用 $today = wp_date('Y-m-d G:i:s'); $today = new DateTime($today); if($finishdate >= $today){ //サービスの提供を終了 } //--- end --- |
タイムゾーンとタイムスタンプは、両方考慮しないとバグの原因になります。
皆さまのお役に立てれば光栄です。
WEB DESIGN全てお任せ!ホームページ制作
RishunTradingでは、日本にはないコンセプトや高いデザイン性をもったヨーロッパ製品の輸入販売、及び、Webサイト制作事業などをおこなっております。
「全てお任せ!ホームページ制作」は、ドメイン取得からサーバー設定、レスポンシブルデザイン(スマホ、タブレット対応)、SEO対策がすべて含まれたお得なホームページを制作するサービス商品です。
運用開始後に「Webサイト運用管理サービス(保守)」と組み合わせて購入しますと、メンテナンス、更新も含めてすべて弊社で実施しますので、お客様は安心して本業に集中する事ができます。
しかもなんと、「全てお任せ!ホームページ制作」は、¥100,000!で提供しております。
本業が忙しい中小企業様に大変ご好評を頂いている商品です。
独自ドメイン取得
サーバー開設&設定
レイアウト設計
レスポンシブルデザイン
(*1)検索エンジン最適化
(SEO対策)場所Maps
お問い合わせフォーム
SSL化
各種SNS連携
運用マニュアル