WordPressの日時(タイムスタンプ)について
以前、Wordpressをカスタマイズしている際に、日時について戸惑った経験がありました。
その際に、いろいろ調べてみてわかったことがあったので、そのお話となります。
1.PHPの日時取得関数を使って日時を取得すると日時がずれている。
WordPressのカスタマイズ作業をしている中で、現在時刻を取得して動作している処理において、時刻が8時間ずれている事を発見。
調査してみるとその原因は、何気なくdate関数を使って現在時刻を取得して処理を行っている箇所でした。
タイムゾーンが怪しいなということで、この時に調べた内容を掲載します。
2.特定地域の日時の算出方法
特定地域の日時は、タイムスタンプとタイムゾーンオフセット(*1)を考慮することでその地域の日時を計算します。
*1 タイムソーンオフセット
特定の地域の時刻を協定世界時(UTC)からの時差で表現するもの。世界中には、地球の経度によって異なるタイムゾーンが存在し、それぞれのタイムゾーンはUTCとの時差を持ちます。
通常タイムスタンプは、OSのタイムゾーンやプログラムの設定の値からタイムゾーンオフセット値を計算します。PHPならば、php.iniなどです。
なんでもそうですが、スマホもタブレットも、PCも最初の設定で「地域」の設定をします。これで各種の機器の時刻が日本時間になるわけです。
3.Wordpressのタイムゾーン
WordPressでは、Wordpressタイムスタンプという形で独自のタイムスタンプを使っています。
WordPressでは、管理画面で設定されたタイムゾーンを整数値に変換して使用しています。
つまり、以下の様なイメージ
WordPressタイムスタンプ = Unixタイムスタンプ + タイムゾーンオフセット(*2)
*2 管理画面で設定されたタイムゾーンを整数値に変換した値。
4.問題点
WordPressでは、最初にphp.iniのタイムゾーン設定を無効化しています。
wp-settings.php
1 2 | // WordPress calculates offsets from UTC. date_default_timezone_set( 'UTC' ); |
WordPressでは、Wordpressタイムゾーンを使用するため、時差なしにしてしまいます。
(独自にタイムゾーンオフセットを設定しているため。)
そのため、PHPの関数(date関数など)を使って現在時刻を取得すると、時差なしのロンドン日時になるという問題が生じます。
だからといって、PHPの関数で、
date_default_timezone_set(‘Asia/Tokyo’);
などとタイムゾーンを設定してはいけません。
WordPressは、Wordpress独自のタイムスタンプで動作しているため、Wordpress側の日時関連処理がおかしくなります。
5.解決策
WordPressが提供している関数(wp_dateなど)を使用しましょう。
以上
WEB DESIGN全てお任せ!ホームページ制作
RishunTradingでは、日本にはないコンセプトや高いデザイン性をもったヨーロッパ製品の輸入販売、及び、Webサイト制作事業などをおこなっております。
「全てお任せ!ホームページ制作」は、ドメイン取得からサーバー設定、レスポンシブルデザイン(スマホ、タブレット対応)、SEO対策がすべて含まれたお得なホームページを制作するサービス商品です。
運用開始後に「Webサイト運用管理サービス(保守)」と組み合わせて購入しますと、メンテナンス、更新も含めてすべて弊社で実施しますので、お客様は安心して本業に集中する事ができます。
しかもなんと、「全てお任せ!ホームページ制作」は、¥100,000!で提供しております。
本業が忙しい中小企業様に大変ご好評を頂いている商品です。
独自ドメイン取得
サーバー開設&設定
レイアウト設計
レスポンシブルデザイン
(*1)検索エンジン最適化
(SEO対策)場所Maps
お問い合わせフォーム
SSL化
各種SNS連携
運用マニュアル