WordPressを使っていて、現在の日時を取得する機会がありました。例えば、どこかのAPI等を使ってデータを取得した日時をDBに格納する時などです。そこで、phpの「date関数」を使ってWordPress上で実行すると、値がUTC(協定世界時)で取得されます。具体的にどうなるか、試しました。
例:現在の日時を取得すると・・・9時間ずれてしまう
2013-12-2 15:56:43 //現在の日時 2013-12-2 06:56:43 //WordPress上で「date」関数を使った場合。UTCになってます
上記のように、WordPress上で「date」関数を使うと、9時間ずれて取得されます。また、php.iniファイルでタイムゾーンを東京「date.timezone = Asia/Tokyo」に指定済だとしても、だめなんですよねぇ。
タイムゾーンを設定しているのに、UTCになってしまう理由
WordPressを動かすために必要な「wp-settings.php」ファイルに以下の記述があります。
// WordPress calculates offsets from UTC. date_default_timezone_set( 'UTC' );
ここに書いてあるタイムゾーンの設定が、上書きしているんだと思います。「wp-settings.php」ファイルの改変はお勧めできないので、他の方法でやります。
対策:WordPressで日時を扱うには便利な関数があります
というわけで「date関数」の代わりに、WordPress側で用意されている「date_i18n関数」を使うことで回避できました。以下に概要をメモしましたので、興味がありましたらご参考ください。
「date_i18n」関数とは
Codexに説明が書かれていますので、引用しますと・・
タイムスタンプに基づいて、ローカライズされた書式で日付を取得する。
ロケールが月と週を指定している場合、日付にもその書式を適用します。そうでない場合、日付書式文字列が適用されます。
i18n は、Internationalization(最初の “i” と最後の “n” の間に 18 文字)=国際化を意味します。
なるほど~。早速試そう!
サンプルコード
date_i18n("Y-n-j H:i:s")
結果
2013-12-2 16:15:06
おお~。うまく現在の日時を取得できました。オプションなどの設定もできますので、詳細はCodexでご確認ください。
「date_default_timezone_set」でもタイムゾーンを設定できますが・・・
「date_default_timezone_set関数」を使えばタイムゾーンを設定できます。
date_default_timezone_set('Asia/Tokyo');
この方法は、どうなんだろな~
PHPファイルごとに毎回指定する必要があるので、ちょっと面倒ですね。・・・「wp-settings.php」ファイルに書かれている設定が「UTC」なので、準拠したほうがいい気がします。WordPress専用の「date_i18n関数」も用意されていますしね。それに、タイムゾーンを変更してしまうと、予期せぬ動作をしてしまうかもしれないです。しないかもしれないけど。
予期せぬ動作がおこると不安なので、例えば「date_default_timezone_set関数」設定したタイムゾーンは後でUTCに戻さないといけないとか、そんな工程が増えるとやっぱりめんどうなので、ここはひとつ、「date_i18n関数」を使うと覚えてしまったほうが手っ取り早いように思っています。
このページを共有する