1. TOPTOP
  2. Webサービス
  3. PHP

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

php

ドットインストールの学習動画を見ながらカレンダー(新しいタブで開く)を作っていたときのことです。DatePeriodというクラスを作成して、当月の初日から末日の数字を出力するコードをしていました(下記のコードは当該レッスンから引用させていただきました)。

$period = new DatePeriod(
  new DateTime('first day of this month'),
  new DateInterval('P1D'),
  new DateTime('first day of next month')
);

DatePeriodクラスが使えない。タイムゾーンに問題が

すべてのサーバー上(さくらのクラウド)でコードを書き上げると、 Webブラウザ上でこのような表示がされます。

dateperiod_calendar1

しかし、同じことをローカル開発環境(Vagrant)でやると、エラーが表示されます。どうやらタイムゾーンの設定に問題があるようです。

dateperiod_calendar2

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"

他にどこを修正すればいいでしょうかね。とりあえず「分かりません」ということだけ記録しておきます。

〔参考サイト〕