WordPressでの現在日時取得はdate_i18n()を使う

この記事を読む目安: 1分程度

WordPressで(現在)日時を取得しようとして date() を利用すると UTC で返ってきていつも「えぇ?」となるので備忘録として残しときます。

WordPress の wp-load.php が存在するディレクトリ上に次のコードを置いて実行してみると以下のように返ってきます。

<?php
echo date_default_timezone_get() ."\n";
echo date("Y-m-d H:i:s") ."\n";

require "wp-load.php";
echo date_default_timezone_get() ."\n";
echo date("Y-m-d H:i:s") ."\n";
Asia/Tokyo
2013-06-04 11:53:28
UTC
2013-06-04 02:53:28

wp-load.php を通すと wp-config.php を経由してインクルードされる wp-settings.php にて、

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

と定義されている都合から、time()date() といったPHP標準の日時関連の関数は UTC で値を返してきます。

ぐぐるとよく、wp-settings.php の date_default_timezone_set('UTC') の引数を ‘Asia/Tokyo’ に置き換えるとOK みたいな記述を見かけるのですが、wp-settings.php は WordPress をバーションアップした際に置き換わる対象に含まれるファイルなので、うっかりバージョンアップしたが最期、大惨事!!になりがちです。

あるいはdate()time() を使う前に逐次 date_default_timezone_set( 'Asia/Tokyo' );……というのもあまりに冗長で賛同できないところ。

WordPress にはローカル日時を扱う関数がちゃんと用意されているので、そちらを利用します。それが date_i18n()

関数リファレンス/date i18n – WordPress Codex 日本語版によると、第3引数にGMTに変換するかのパラメータ(真偽値)を設定できる以外はPHP標準の date() と同じなので、使い方自体に困ることはないと思います。前のサンプルに手を加えて、

<?php
echo date_default_timezone_get() ."\n";
echo date("Y-m-d H:i:s") ."\n";

require "wp-load.php";
echo date_default_timezone_get() ."\n";
echo date("Y-m-d H:i:s") ."\n";

echo date_default_timezone_get() ."\n";
echo date_i18n("Y-m-d H:i:s") ."\n";

実行してみると……

Asia/Tokyo
2013-06-04 11:53:28
UTC
2013-06-04 02:53:28
UTC
2013-06-04 11:53:28

と、timezone は変更されないままローカル日時が返ってきます。

なお、WordPress 上でローカル日時のUnixタイムスタンプの値が欲しい場合は

date_i18n("U");

または

current_time("timestamp");

で取得できます。

参照URL

関連するかもしれない記事

このブログをお気にいただけましたら是非 RSSの購読 または Twitterのフォロー をお願いします!!
UCWD-Studioについて
ホームページ制作Webシステム開発を中心に、「作り終えてから」のより良いカタチをご提案することで、机上の企画が本当に効果を生む仕組みづくりをお手伝いしています。
また、ホームページ制作や運営は既に他社に依頼してるけれど、専門の担当者がいなくてホームページ制作・運営に関する提案や資料がよく分からない……というお悩みにセカンド・オピニオンとしてご助言もしていますので、ホームページに関するお悩みがありましたらお気軽にお問合せください
[投稿日時]
2013年06月05日 09:00:39
[カテゴリー]
WordPress
[タグ]
[ブックマーク]
Clip to Evernote
Livedoor clipに登録
ページの先頭へ