シェアオフィス6F
貸会議室6F

こんにちは。スタッフのユースケです。

今日はWordPressで日時を扱う時のお話しです。

WordPressで日付を扱っててよくあるのが、投稿日のお話し。
記事を一覧で表示していて、投稿日を出力してるのにいくつかの記事で何も出力されていない!なんて現象が発生し、なんでかなーと思ってたら関数の仕様でしたってケースで、この件については以前、某7Fオーナーが詳しく解説してくれているので、コチラをご覧ください。

さて、今日はそれとはちょっと違って、思わぬところに潜んでいた伏兵?のお話しです。

日付基準で記事を抽出したりなんかしていると、稀に望んでいる記事が出力されないなんてことありません?
1日ずれれば出てくれるし、比較の条件式が間違っているわけでもないし…
そんなとき悪さをしているやつはこいつ「date関数」です!
(まぁ悪いのは自分で、date関数はいつもどおりの動きをしてくれているのですが…)

PHPのdate関数は、ローカルの日付・時刻を書式化してくれるものなのですが、
WordPress内でこの関数を使用すると、UTC(協定世界時)で取得されてしまうのです…
協定世界時って何ぞやってことですが、簡単にいうと「日本時間=協定世界時+9時間」ということなんですが、普段PHPで使ってるときはローカルのタイムスタンプで動いているので、date関数が原因だとは露ほども思わず…

じゃあタイムゾーンをいじろうと管理画面の一般設定を見てみると、すでに「東京」になってる…
なら次はphp.iniかと確認してみるも、ここも「Asia/Tokyo」になってる。そもそもPHPでは上手くいってるんだから、ここじゃないよな…
ではどこかと調べてみたら、どうも「wp-settings.php」ファイル内の下記記述が原因のようです。

// WordPress calculates offsets from UTC.
date_default_timezone_set( 'UTC' );

PHPとWordPressでそれぞれにタイムゾーンを持っているために、意図的にWordPress側がやっていることのようですが、コアファイルはいじるべきじゃないし、functions.phpとかでセットし直して他に影響がでても嫌だし、どうしたもんかと。

探してみたらやっぱりありました、WordPressの関数「date_i18n」が!

この関数はローカライズされた書式で日付を取得してくれるもので、これを使うときっちり日本時間を表示してくれます!
詳しくはCodexで確認してみてください。

実際にテンプレートファイル内で使うと、下記のような結果になります。

echo date( 'Y-m-d H:i:s' );
echo date_i18n( 'Y-m-d H:i:s' );

// 出力結果
2015-02-19 05:35:21
2015-02-19 14:35:21

これで日付が変わったのに掲載期間を過ぎた記事が表示されちゃう!なんて事態を回避できますね。

普段何気なく使っているdate関数、これからは意識してdate_i18n関数を使っていきましょう。
いずれ無意識に「date_i18n」と打つようになって、思わぬトラップに引っかかることもなくなるはずです!

スポンサーリンク

スポンサーリンク

この記事を書いた人

7Fを運営している株式会社コミュニティコムでプログラマーをしています。担当はWeb制作ですが、受付にもフワッと座ってます。呼称は「ゆーすけ」なので気軽に呼んでください。7F受付にあるチェックインシステムを作った人だったりします。好きなものはお酒です。でも痛風なのでビールは与えないでください!だんだん年齢に抗えなくなってきたので、イイ感じにできる運動があれば紹介してください。



メールマガジン登録

週1回程度でメールマガジンにて、コワーキングスペース7Fのイベントや勉強会情報や近況、Web関係や地域情報などを配信しています。
もし良ければ以下のフォームにメールアドレスを入力して登録してくださいね!

7F情報をぜひフォローください!


スポンサーリンク

月額会員募集中の申し込みフォーム
イベント情報
会議室ご予約
オープンスペースご予約
無料見学ご予約
お問い合わせ
メールマガジン登録フォーム
フロアマップ
よくある質問
Amazonコワーキングスペース7Fのほしい物リスト
一時託児施設利用
7F大学
リブライズ
Eightどこでもスキャン計画
7Fスタッフ募集のお知らせ
シェアオフィス6F
貸会議室6F

混雑状況やイベント情報

サイト内検索