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 相关文章推荐
十天学会php之第一天
Oct 09 PHP
PHP字符串处理的10个简单方法
Jun 30 PHP
PHP curl 并发最佳实践代码分享
Sep 05 PHP
解析php函数method_exists()与is_callable()的区别
Jun 21 PHP
IIS安装Apache伪静态插件的具体操作图文
Jul 01 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
php集成环境xampp中apache无法启动问题解决方案
Nov 18 PHP
php使用number_format函数截取小数的方法分析
May 27 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
PHP实现一个轻量级容器的方法
Jan 28 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 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 身份证号验证函数
2009/05/07 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
php实现数字补零的方法总结
2018/09/12 PHP
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
javascript实现画板功能
2020/04/12 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
Python迭代器和生成器介绍
2015/03/06 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
django之自定义软删除Model的方法
2019/08/14 Python
详解Python3 pandas.merge用法
2019/09/05 Python
python实现实时视频流播放代码实例
2020/01/11 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
教师找工作推荐信
2013/11/23 职场文书
双语教学实施方案
2014/03/23 职场文书
研发工程师岗位职责
2014/04/28 职场文书
警示教育活动总结
2014/05/05 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
文员岗位职责
2015/02/04 职场文书
农业项目投资意向书
2015/05/09 职场文书
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫