Linuxの時間
dateコマンド:システムの日付と時刻を表示・設定する
### システムtimezoneは "dpkg-reconfigure tzdata" で変更する ### root@hostname:/home/shimizu# dpkg-reconfigure tzdata Current default time zone: 'Asia/Tokyo' Local time is now: Thu Jan 15 21:22:07 JST 2015.# JSTはUTC(協定世界時)を9時間進めたもの Universal Time is now: Thu Jan 15 12:22:07 UTC 2015. root@hostname:/home/shimizu# find /etc/ -type f -cmin 1 # 1分以内に変更されたファイルを確認する /etc/timezone /etc/localtime ### (おまけ)localtimeの変更方法 ### root@hostname:/home/shimizu# cp -p /usr/share/zoneinfo/US/Alaska /etc/localtime root@hostname:/home/shimizu# date 2015年 1月 15日 木曜日 03:20:07 AKST root@hostname:/home/shimizu# cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime root@hostname:/home/shimizu# date 2015年 1月 15日 木曜日 21:20:16 JST
PHPの場合
root@hostname:/home/shimizu# cat /var/www/htdocs/datecheck/1.php <?php echo date_default_timezone_get();?> <br> <?php echo date("Y/m/d (D) H:i:s");?> root@hostname:/var/www/htdocs# php-cgi -i | grep "timezone" <tr><td class="e">Default timezone </td><td class="v">Asia/Tokyo </td></tr> <tr><td class="e">date.timezone</td><td class="v"><i>no value</i></td><td class="v"><i>no value</i></td></tr>
php.iniには何も設定されておらず、defaultはAsia/Tokyoの模様。アクセスすると
時間を変更すると
root@hostname:/home/shimizu# date -s "01/01 10:00 2015" 2015年 1月 1日 木曜日 10:00:00 JST root@hostname:/home/shimizu# hwclock --show 2015年01月15日 23時05分17秒 -0.421513 秒
つまりシステム時間を見ていることがわかる
時間を元に戻し、システムのtimezoneをAmerica/Anchorageに変更すると、
root@hostname:/var/www/htdocs# dpkg-reconfigure tzdata Current default time zone: 'America/Anchorage' Local time is now: Thu Jan 15 05:22:06 AKST 2015. Universal Time is now: Thu Jan 15 14:22:06 UTC 2015. root@hostname:/var/www/htdocs# date 2015年 1月 15日 木曜日 05:22:08 AKST root@hostname:/var/www/htdocs# php-cgi -i | grep "timezone" <tr><td class="e">Default timezone </td><td class="v">America/Anchorage </td></tr> <tr><td class="e">date.timezone</td><td class="v"><i>no value</i></td><td class="v"><i>no value</i></td></tr>
つまりdefaultのtimezoneはシステムのtimezoneを見ていることがわかる
php.iniについて
ここでphp.iniにて”Asia/Tokyo”を設定してみる(今まで何も設定していなかった)
root@hostname:/var/www/htdocs# php-cgi -i | grep "php.ini" <tr><td class="e">Configuration File (php.ini) Path </td><td class="v">/etc/php5/cgi </td></tr> <tr><td class="e">Loaded Configuration File </td><td class="v">/etc/php5/cgi/php.ini </td></tr> root@hostname:/var/www/htdocs# vi /etc/php5/cgi/php.ini ==== date.timezone = "Asia/Tokyo" ==== root@hostname:/var/www/htdocs# php-cgi -i | grep "timezone" <tr><td class="e">Default timezone </td><td class="v">Asia/Tokyo </td></tr> <tr><td class="e">date.timezone</td><td class="v">Asia/Tokyo</td><td class="v">Asia/Tokyo</td></tr>
システムtimezoneはAmerica/Anchorageであるが、Asia/Tokyoとなった
つまり、php.iniでの設定が何よりも優先されることがわかる
また時刻的にも問題なかった(23時30分NOW)
CodeIgniterのnow()の場合
now() について
現在時刻をUNIXタイムスタンプで返します
設定ファイル(application/config/config.php)の “time reference” の設定により、サーバのローカル時間またはグリニッジ標準時間を指す時刻になります
local:ローカル時間を基準にする
gmt:グリニッジ標準時を基準にする
マスターの時間を GMT に設定しないつもりなら
(各ユーザが各々のタイムゾーンを設定することができるサイトであれば通常そうすると思います)
PHPの time() 関数を使わずに、この関数を利用する利点はありません
php.iniにて”Asia/Tokyo”を設定していろいろやってみる
root@hostname:/var/www/htdocs# cat CI/system/core/CodeIgniter.php | grep "CI_VERSION" define('CI_VERSION', '2.2.0'); root@hostname:/var/www/htdocs# cat CI/application/config/config.php | grep "time_reference" $config['time_reference'] = 'local'; root@hostname:/var/www/htdocs# cat CI/application/controllers/test.php <?php class Test extends CI_Controller { public function index() { $this->load->helper('date'); echo date_default_timezone_get()."<br>"; echo unix_to_human(now()); } } ?>
時間を変更すると
root@hostname:/var/www/htdocs/CI/application/controllers# date -s "01/01 10:00 2015" 2015年 1月 1日 木曜日 10:00:00 JST root@hostname:/var/www/htdocs# hwclock --show 2015年01月16日 00時40分42秒 -0.826882 秒
先ほど同様システム時間を見ていることがわかる
時間を元に戻し、システムのtimezoneをAmerica/Anchorageに変更すると
root@hostname:/var/www/htdocs# dpkg-reconfigure tzdata Current default time zone: 'America/Anchorage' Local time is now: Thu Jan 15 06:44:51 AKST 2015. Universal Time is now: Thu Jan 15 15:44:51 UTC 2015. root@hostname:/var/www/htdocs# date 2015年 1月 15日 木曜日 06:44:53 AKST
読んでみる
Linux時刻管理の仕組みと設定 – ハードウェアクロック関連
http://www.atmarkit.co.jp/ait/articles/0812/26/news120.html
参考URL
軽量PHPフレームワーク ‘CodeIgniter’ 徹底ガイド!
http://www.ci-guide.info/practical/helper/date/
CodeIgniter ユーザガイド 日本語版 Version 2.0.3
http://codeigniter.jp/user_guide_ja/helpers/date_helper.html