PHP中如何处理时区

简介: 默认安装的LAMP环境中,时区默认设置在GMT时间,所以一般得到的时间都会比我们电脑中显示的时间早八个小时(假设你的时间设置正确,并且时区是在东八区)。PHP提供了两个函数用来处理时区的操作: date_default_timezone_set() 和 date_default_timezone_get() 如果我们希望更改服务器默认的时区,修改 php.ini 文件中的 ;date.timezone = ,添加自己需要的时区,例如 date.timezone = Asia/Chongqing,然后重启服务器就可以了。

默认安装的LAMP环境中,时区默认设置在GMT时间,所以一般得到的时间都会比我们电脑中显示的时间早八个小时(假设你的时间设置正确,并且时区是在东八区)。PHP提供了两个函数用来处理时区的操作:

date_default_timezone_set() 和 date_default_timezone_get()

如果我们希望更改服务器默认的时区,修改 php.ini 文件中的 ;date.timezone = ,添加自己需要的时区,例如 date.timezone = Asia/Chongqing,然后重启服务器就可以了。PHP支持的 timezone 的字符串在参考资料[1]中可以看到。

用下面这一段代码,可以比较清楚的看到时区变化的影响:

$now = time();
echo "The GMT now is : " . date('Y-m-d H:i:s', now()) . '<br />' ;
echo "The local time is : " . date('Y-m-d H:i:s', gmt_to_local($now) ) . '<br />';
date_default_timezone_set('Asia/Chongqing');
echo 'Set the timezone to :' . date_default_timezone_get() . "<br />";
echo "The GMT now is : " . date('Y-m-d H:i:s', now()) . '<br />' ;
echo "The local time is : " . date('Y-m-d H:i:s', gmt_to_local($now) ) . '<br />';

如果我们的站点是面向单一时区的用户,我想采用这个时区的时间来记载没什么问题,或者网站应用的类型并不 Care 时间的差别,那么我们用什么时间做存储都没关系。一旦我们的用户对于时区的影响有较大关系的时候,我想应该统一使用GMT的标准时间来进行存储,在显示的时候再根据用户所在的时区进行显示,这样虽然前端显示每次都需要去计算用户当前的时间,但是对于后台逻辑的统一性应该是大有裨益的。

目前,我们国家已经废除了夏令时的使用,但是世界上仍有其他一些国家在使用夏令时,我们在程序处理的时候应该注意这个问题,具体的资料可以参考 Daylight Saving

Technorati Tags: timezones, 时区, 夏令时

参考资料:
1、List of Supported Timezones
2、Daylight Saving

相关文章
|
Unix PHP
PHP快速入门05-时间日期与时区,附30个常用案例
PHP中的日期和时间处理功能极其强大,包括了多种格式化、解析、比较等常用操作。本文主要对此讲解。另外给出30个高频使用示范。
178 0
【开发环境】php.ini设置时区不生效
【开发环境】php.ini设置时区不生效
433 0
【开发环境】php.ini设置时区不生效
|
Unix PHP
PHP中关于时间(戳)、时区、本地时间、UTC时间等的梳理
PHP中关于时间(戳)、时区、本地时间、UTC时间等的梳理 在PHP开发中,我们经常会在时间问题上被搞糊涂,比如我们希望显示一个北京时间,但是当我们使用date函数进行输出时,却发现少了8个小时。几乎所有的php猿类都必须对php中几个重要的时间转换等方法进行研究。
2186 0
|
API PHP 网络架构
**关于PHP如何定义一个空对象(REST API如何处理空对象和空数组)
在写接口的过程当中,手机端有需求说不让返回json数组,要返回一个对象。 那么我们可以怎么做呢? 其实很简单,强制转换即可。 声明空对象: $empty_object=(object)array(); 或者 $empty_object=(object)null; 把数组转换为对象: ...
1199 0
|
应用服务中间件 PHP nginx
nginx php No input file specified 如何处理?
配置nginx支持php 出现了No input file specified ? 只要修改下安装目录下的  nginx.conf下的  location ~ \.php$ {              root           html;              fastcgi_pass   127.0.0.1:9000;              fastcgi_ind
2156 0
|
PHP 移动开发
PHP设置时区,记录日志文件的方法
关键字:PHP 时区 时间 日志    
721 0
|
PHP 数据库 存储
PHP中跨时区应用的解决方法
现在有一个跨时区的应用,不同时区登录的用户需要看到自己时区的时间,同时也要能够进行时区的切换,有什么好办法么。 我的思路是,系统中所有存储的时间都是GMT(UTC)时间,用户登录时,根据用户所在的时区进行对应的显示。
845 0