WordPressでは、WordPressを構成するファイルの一つ wp-settings.php
内で、タイムゾーンを UTC に設定しています。そのため、date
関数で日付を取得すると、日本時間とは9時間ずれた時刻を取得してしまいます。
日本での日時を取得するには、date_i18n
関数か、またはcurrent_time
関数を使います。Webを検索すると、そのように書いているサイトがほとんどですし、それは間違っていません。
でも、それは現在の日時を取得するとか、○時間後の時刻を取得するとか、そういう場合の話です。
ファイルの更新日時など、WordPress外のリソースから日付を取得するときには、話が変わってきます。
PHPでファイルの更新日時を取得するには、filemtime
関数を使います。以下のように、date
関数とdate_i18n
関数を使用した場合で、取得できる日時を比べてみます。
// このファイルの更新日は 2018-01-18 17:49
$file_name = '/var/www/html/.../sample.jpg';
// date関数
echo 'date= ' . date('Y-m-d H:i', filemtime($file_name));
// date_i18n関数
echo 'i18n= ' . date_i18n('Y-m-d H:i', filemtime($file_name));
結果は次のようになります。
date= 2018-01-18 08:49
i18n= 2018-01-18 08:49
このように、どちらの関数を使っても9時間ずれました。
ファイルの更新日時を正しく取得するには
それには、WordPressのgmt_offset
オプションを使用します。
上記のファイルの更新日時を取得するコードを書き換えると、次のようになります。
echo 'date= ' . date('Y-m-d H:i', filemtime($file_name) + 3600 * get_option('gmt_offset'));
結果は
date= 2018-01-18 17:49
正しく取得できました。