php.ini のタイムゾーン設定を忘れるな!
セットアップ後に、php.ini のデフォルトタイムゾーン設定をすっかり忘れて、下記のようなエラーが永遠と記録されていたので、対応の仕方も含めて記録として残しておきます。
PHP Warning: date(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Asia/Tokyo’ for ‘JST/9.0/no DST’ instead
こんなエラーが出たら、タイムゾーンの設定を!
タームゾーンの設定(date.timezone)
php.ini の ;date.timezone がコメントアウトされているので、date.timezone = Asia/Tokyo のように設定するだけです。php.iniは、複数存在している場合があるので、locate php.ini などで検索して、すべてにタイムゾーンを設定してください。
例えば、、
/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini
/etc/php5/apache2/php.ini
/etc/php.ini
下記は既に修正済みです。
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Tokyo
PHPのコマンドライン(cli)用 php.ini も忘れずにタイムゾーンの設定をしてください。Cronとかで使うかもしれません。# php -i | grep php.ini でパスが分ります。
php.ini を修正できない環境の場合は、date_default_timezone_set('Asia/Tokyo'); とスクリプト内に指定するのもあり。詳しくは、PHPマニュアルをどうぞ。
自動でタイムゾーンを設定してくれると助かるんですけどね・・・。
記事の警告は PHP 5 系のものです。PHP 7.0 以降は、date.timezone が未設定でも警告は出ず、黙って UTC(協定世界時)が使われます。警告が出ない分、時刻が9時間ずれていることに気づきにくくなっています。PHP 8.5 で、php.ini を読み込まずに試した結果です。
$ php -n -r 'echo date("Y-m-d H:i T"), PHP_EOL, date_default_timezone_get(), PHP_EOL;'
2026-11-04 18:56 UTC
UTC
$ php -n -d date.timezone=Asia/Tokyo -r 'echo date("Y-m-d H:i T"), PHP_EOL;'
2026-11-05 03:56 JST
Debian 13 の php.ini の場所は /etc/php/8.4/cli/php.ini・/etc/php/8.4/fpm/php.ini です(記事の /etc/php5/ は当時の場所)。php.ini 本体を書き換えるより、設定を1つだけ書いたファイルを置くほうが、PHP の更新で消えません。
# echo 'date.timezone = Asia/Tokyo' > /etc/php/8.4/mods-available/timezone.ini
# phpenmod timezone
# systemctl restart php8.4-fpm
$ php -r 'echo date_default_timezone_get(), PHP_EOL;'
Asia/Tokyo
このサイトを置いている Debian 13.7 の VPSは OS の時刻帯が Asia/Tokyo(日本時間)ですが、PHP の date.timezone は UTC になっていて、同じ時刻が 9時間ずれて表示されました(2026年11月5日)。PHP は OS の設定ではなく、php.ini の date.timezone を見ます。
$ timedatectl | grep "Time zone"
Time zone: Asia/Tokyo (JST, +0900)
$ php -r 'echo date("Y-m-d H:i T"), PHP_EOL;'
2026-11-05 02:41 UTC
$ php -d date.timezone=Asia/Tokyo -r 'echo date("Y-m-d H:i T"), PHP_EOL;'
2026-11-05 11:41 JST
| どこの設定 | 確かめ方 | このサーバー |
|---|---|---|
| OS | timedatectl | Asia/Tokyo(+0900) |
| PHP | php -r 'echo date_default_timezone_get();' | UTC |
| 困りごと | 原因 |
|---|---|
| 記事の投稿時刻が 9時間ずれる | PHP が UTC |
| ログの時刻とアプリの時刻が合わない | OS(JST)と PHP(UTC)が違う |
| 日付が変わる時刻が朝の 9時になる | UTC の 0時 = 日本の 9時 |
⚠ Laravel などのフレームワークは、php.ini ではなくアプリの設定(APP_TIMEZONE など)で時刻帯を決めます。php.ini と両方を確かめてください。