WordPressで時刻がずれる。Timezoneを設定してみる。

WordPress内部では時刻はUTC協定世界時で扱っている。 そのため、普通にdateを使うとUTCの時刻が返ってくる。 JST(+9時間)の日本向けにするには少し注意が必要だ。 多国語対応には、date_i18nを使う。

<?php echo date('Y/m/d H:i:s')?>
2013/12/01 02:11:17
<?php echo date_i18n('Y/m/d H:i:s')?>
2013/12/01 11:11:17

date_i18nは wp-includes\functions.php に定義があり、時刻取得ではcurrent_timeを使っている。 current_timeはWordPressの一般設定のタイムゾーン定義から時間差を調整しているようだ。 ここでは、get_option( ‘gmt_offset’ )=9となり、9時間*3600秒が足し込まれる。

function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false ) 

function current_time( $type, $gmt = 0 )

return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
```


 し・か・し。date_i18nを使うことをすっかり忘れて、phpのDateTimeを使って、テンプレートを記述してしまった...いろいろ対策はあるが、せっかくDateTime使ったので、このままやってみる。 

<span style="color: #ff0000;">注意:この方法だと、Asia/Tokyo限定となる!</span>! 

```PHP
// これだと、UTCを返す。
 $dt = new DateTime(); 

 // タイムゾーンを指定してDateTimeをnewする。
 $dtzone = new DateTimeZone( "Asia/Tokyo" );
 $datetest = new DateTime( "now", $dtzone );
 echo $datetest->format( 'Y/m/d H:i:s' )."\n";

 // UTC+9 となる。
 2013/12/01 11:11:17```
 DateTimeZoneを少し調べてみると、こうなっているらしい。 

```PHP
$dtzone = new DateTimeZone( "Asia/Tokyo" );
 echo "location \n";// - タイムゾーンの位置情報を返す
 print_r( $dtzone->getLocation() );
 echo "name ".$dtzone->getName()."\n";// - タイムゾーンの名前を返す
結果
location 
Array
(
    [country_code] => JP
    [latitude] => 35.65444
    [longitude] => 139.74472
    [comments] => 
)
name Asia/Tokyo

次から注意しよう。