ドットインストールの学習動画を見ながらカレンダーを作っていたときのことです。DatePeriodというクラスを作成して、当月の初日から末日の数字を出力するコードをしていました(下記のコードは当該レッスンから引用させていただきました)。
[php]$period = new DatePeriod(
new DateTime(‘first day of this month’),
new DateInterval(‘P1D’),
new DateTime(‘first day of next month’)
);[/php]
目次
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"
他にどこを修正すればいいでしょうかね。とりあえず「分かりません」ということだけ記録しておきます。
〔参考サイト〕