PHPの開発環境によってデフォルトのタイムゾーンが違う。さくらのクラウドとVagrantの比較

目次
ドットインストールの学習動画を見ながらカレンダー(新しいタブで開く)を作っていたときのことです。DatePeriodというクラスを作成して、当月の初日から末日の数字を出力するコードをしていました(下記のコードは当該レッスンから引用させていただきました)。
$period = new DatePeriod( new DateTime('first day of this month'), new DateInterval('P1D'), new DateTime('first day of next month') );
DatePeriodクラスが使えない。タイムゾーンに問題が
すべてのサーバー上(さくらのクラウド)でコードを書き上げると、 Webブラウザ上でこのような表示がされます。
しかし、同じことをローカル開発環境(Vagrant)でやると、エラーが表示されます。どうやらタイムゾーンの設定に問題があるようです。
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...
タイムゾーンの比較
phpコマンドで、両者のタイムゾーンに関する情報を比べてみましょう。
さくらのクラウドの場合
さくらのクラウドでは”Asia/Tokyo”になっています。
$ php -i | grep timezone Default timezone => Asia/Tokyo date.timezone => Asia/Tokyo => Asia/Tokyo
Vagrantの場合
ですが、Vagrantでは”Asia/Tokyo”になっていません。
$ php -i | grep timezone Default timezone => UTC date.timezone => no value => no value
php.iniではどちらも”Asia/Tokyo”に
タイムゾーンに問題があるんだったら、php.iniの当該箇所を修正すればいいだけです。ですが、困ったことにさくらのクラウドでもVagrantでも、どちらもちゃんと”Asia/Tokyo”に設定されています。
$ sudo vi /etc/php.ini ... date.timezone = "Asia/Tokyo"
他にどこを修正すればいいでしょうかね。とりあえず「分かりません」ということだけ記録しておきます。
〔参考サイト〕