现在有一个跨时区的应用,不同时区登录的用户需要看到自己时区的时间,同时也要能够进行时区的切换,有什么好办法么。

PHP的思路是,系统中所有存储的时间都是GMT(UTC)时间.

因为php的应用可能是跨时区的,时间以哪个时区存储是个问题(比如按照东8区存,那么别的时区的用户读到时间就会有问题)。所以用php中依据php.ini里面的时区设置存储时间,默认是格林威治标准时间GMT(0时区,英国伦敦所在的时区)存储时间。读取时间的时候,使用函数date_default_timezone_set()将存储时间转为当地时区就可以。

应用举例:比如

 
  
  1. <?php   
  2.     $time   = date('Y-m-d H:i:s');   
  3. echo $time;   

咦?怎么是 2009-02-26 06:52:58。 本机(上海)时间明明是:2009-02-26 14:52:58
我的时间整整提前了进入未来8个小时:) 大家已经猜出来了,东八区,是时区问题,php如何知道时区呢?通过更改php.ini中的设置:

 
  
  1. [Date]   
  2. ; Defines the default timezone used by the date functions   
  3. date.timezone = Asia/Shanghai  

重新启动服务器,重新运行代码你就会看到时间输出一致了

php5中php.ini默认是GMT时间,北京是+8时区,
不建议在php.ini中修改时区设置可通过php脚本来设置,若您有自己完全管理权的服务器当然也可以在php.ini中修改默认时区设置。如果没有权限改php.ini,
可以用函数ini_set(),date_default_timezone_set通过以下方法来设置

 
  
  1. <?php   
  2.     date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai'   亚洲/上海   
  3.     date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'为“亚洲/重庆”   
  4.     date_default_timezone_set('PRC');//其中PRC为“×××”   
  5.     ini_set('date.timezone','Etc/GMT-8');   
  6.     ini_set('date.timezone','PRC');   
  7.     ini_set('date.timezone','Asia/Shanghai');   
  8.     ini_set('date.timezone','Asia/Chongqing');   

通过echo date_default_timezone_get();来查看设置。

引自:http://koda.iteye.com/blog/1008939

其他参考资料:http://www.cnblogs.com/cocowool/archive/2010/7/17.html