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
次から注意しよう。