PHP中date与gmdate的区别及默认时区设置


Posted in PHP onMay 12, 2014

一、date与gmdate有什么区别?

PHP时间函数中有两个格式化函数:date()和gmdate(),在官方的文档中的描述为:

date()   #— 格式化一个本地时间/日期
gmdate() #— 格式化一个 GMT/UTC 日期/时间,返回的是格林威治标准时(GMT)。

先来举个例子,我们现在所在的时区是+8,那么服务器运行以下脚本返回的时间应该是这样的:
当前时间假定是2013-03-14 12:15:27
echo date('Y-m-d H:i:s'); #与date('Y-m-d H:i:s' time());等效,输出为:2007-03-14 12:15:27
echo gmdate('Y-m-d H:i:s'); #与gmdate('Y-m-d H:i:s' time());输出为:2007-03-14 04:15:27

但是这只是在Linux+Apache下运行PHP所得的结果,如果在Windows下运行,则2个函数返回都是:2013-03-14 04:15:27。
所以,我们应该给一个兼容性的写法,统一使用gmdate,并手工设置当前时区,写法改进如下:
echo gmdate('Y-m-d H:i:s', time() + 3600 * 8);

这样不管在Linux+Apache下还是Windows下都得到了正确的结果,当然这样写还有一个好处,当网站是面向全世界的时候,那么网站用户只要设置所在的时区,程序自动根据用户设置的时区进行时间计算,数据库中信息发布时间只存当前的time()所生成的时间,那么在中国+8时区看到的发布时间是:2007-03-14 12:15:27,那么在欧洲+2时区用户看到这个信息的发布时间是:2007-03-14 06:15:27,这样信息的时间就全部对应正确了。

二、修改PHP的默认时区会影响么?

每个地区都有自己的本地时间,在网上以及无线电通信中,时间的转换问题就显得格外突出。整个地球分为二十四个时区,每个时区都有自己的本地时间。在国际无线电或网络通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC,Universal Time Coordinated),是由世界时间标准设定的全球标准时间。UTC原先也被称为格林威治标准时间(GMT,Greenwich Mean Time),都与英国伦敦的本地时间相同。

PHP默认的时区设置是UTC时间,而北京正好位于时区的东八区,领先UTC八个小时。所以在使用PHP中像time()等获取当前时间的函数时,得到的时间总是不对,表现是和北京时间相差八个小时。如果希望正确的显示北京时间,就需要修改默认的时区设置,可以通过以下两种方式完成。

如果使用的是独立的服务器,有权限修改配置文件,设置时区就可以通过修改php.ini中的date.timezone属性完成。我们可以将这个属性的值设置为”Asia/Shang”、”Asia/Chongqing”、”Etc/GMT-8″或PRC等中的一个,再在PHP脚本中获取的当前时间就是北京时间。修改PHP的配置文件如下所示:

date.timezone = Etc/GMT-8
//在配置文件中设置默认时区为东8区(北京时间)
     

如果您使用的是共享服务器/虚拟主机空间,没有权限修改配置文件php.ini,并且PHP版本又在5.1.0以上,也可以在输出时间之前调用date_default_timezone_set()函数设置时区。该函数需要提供一个时区标识符作为参数,和配置文件中date.timezone属性的值相同。该函数的使用如下所示:

date_default_timezone_set(‘PRC');          
//在输出时间之前设置时区,PRC为中华人民共和国 echo date(‘Y-m-d H:i:s', time());        
//输出的当前时间为北京时间
PHP 相关文章推荐
用ODBC的分页显示
Oct 09 PHP
PHP防注入安全代码
Apr 09 PHP
关于php curl获取301或302转向的网址问题的解决方法
Jun 02 PHP
深入PHP中慎用双等于(==)的详解
Jun 06 PHP
thinkphp在模型中自动完成session赋值示例代码
Sep 09 PHP
php判断并删除空目录及空子目录的方法
Feb 11 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
PHP 生成微信红包代码简单
Mar 25 PHP
Yii2.0 模态弹出框+ajax提交表单
May 22 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 PHP
在laravel框架中实现封装公共方法全局调用
Oct 14 PHP
PHP三元运算的2种写法代码实例
May 12 #PHP
PHP入门之常量简介和系统常量
May 12 #PHP
PHP实现数字补零功能的2个函数介绍
May 12 #PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 #PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 #PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 #PHP
你可能不知道PHP get_meta_tags()函数
May 12 #PHP
You might like
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
解析yii数据库的增删查改
2013/06/20 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
Jquery中获取iframe的代码
2011/01/11 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
vue之将echart封装为组件
2018/06/02 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
微信小程序单选框自定义赋值
2020/05/26 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python 通过pip安装Django详细介绍
2017/04/28 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
如何使用python代码操作git代码
2020/02/29 Python
python搜索算法原理及实例讲解
2020/11/18 Python
Python tkinter实现日期选择器
2021/02/22 Python
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
电大本科自我鉴定
2014/02/05 职场文书
质检部经理岗位职责
2014/02/19 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
小学生暑假安全公约
2015/07/14 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
节约用水广告语60条
2019/11/14 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS