有关 PHP 和 MySQL 时区的一点总结


Posted in PHP onMarch 26, 2008

PHP 脚本端的市区设置可以在 php.ini 下设置 date.timezone 键的值为 'Asia/Shanghai' 即可。但是通常共享虚拟主机本身没有修改 php.ini 权限。这个时候就应该在程序公共部分加入

ini_set('date.timezone','Asia/Shanghai');动态修改 php.ini 的设置。之后可以测试一下时间是否正确:

var_dump(date());如果服务器的本地时间是正确的,那么一般就能解决问题了。附,PHP 5.1 以上提供了专门的函数修改对应的时区:

date_default_timezone_set('Asia/Shanghai');建议使用此函数,因为更通用一些。对应 'Asia/Shanghai' 其他可以使用的大陆时区还有:Asia/Chongqing 、Asia/Shanghai 、Asia/Urumqi (依次为重庆,上海,乌鲁木齐);港台地区可用:Asia/Macao、Asia/Hong_Kong、Asia/Taipei(依次为澳门,香港,台北);还有新加坡:Asia/Singapore;其他可用的值是:Etc/GMT-8、Singapore、Hongkong、PRC;老外好像把北京漏调了。

但是,在我修改成功 PHP 端的时区以后发现日期并没有正确的记录下来。这个时候我考虑是否是数据库的问题。果不其然,因为程序插入的函数并没有调用 PHP 的时间,而是直接使用 MySQL 的 CURRECT_TIMESTAMP。这个时候就要考虑是否能修改 MySQL 方面的时区。

参考了 MySQL 的文档,发现一个可行的 SQL 语句为:

SET GLOBAL time_zone = '+8:00'; 其中 '+8:00' 是东八区的表示方法,其他的市区依次类推。而我在数据库模型中插入改语句发现权限不够(该死的虚拟主机提供商)。接下来我调试了很多语句,比如:

DATE_ADD(UTC_TIMESTAMP(), INTERVAL 8 HOUR);显示时区的 SQL 语句:

SHOW VARIABLES LIKE 'system_time_zone'等等。而由于 MySQL 权限的限制并没有彻底的解决方案。我 Google 了下,发现老外这个有一个非常好的解决方案。但是他需要修改每条插入数据的 SQL 语句。这样的方案并不是非常的有效,一旦数据库时区改成正常,那么相应的 SQL 语句又要改回来。

而我考虑既然 PHP 端已经可以正确的解决时间的问题了。MySQL 数据库方面虽然可以使用相应的函数解决,但是如果日后迁移到别的主机环境又要改回来。而相应的字段是一个 TIMESTAMP 类型的,默认的值为 CURRECT_TIMESTAMP,当然是可以指定时间的。

那么我的做法就是让 PHP 插入当前正确的时间,这样虽然程序方面需要做相应的修改。不过日后配置修改起来只要修改一处就可以了。最后插入数据库的时间注意一下格式:

date('Y-m-d H:i:s')这样就可以解决问题了。附,一些非常好的参考资料:

http://www.modwest.com/help/kb6-256.html 
http://topic.csdn.net/t/20060503/07/4728521.html 
http://www.phpchina.com/5173/viewspace_5132.html 
http://www.phpx.com/pth110355.php 
更新:由此 wiLdGoose 兄说他也碰到同样的问题,但是无法解决。结果经过种种的假设和判断以后,到最后发现原来是 Zend Studio 的时区配置问题(我狂汗ing)。看来除去运行环境,开发环境也是需要注意以下的。
今天我也遇到这个问题了,我比你幸运,自己的主机,可以:
SET GLOBAL time_zone = '+8:00'; 
呵呵,你可惜了,不能用 UNIX_TIMESTAMP() 这样的函数了.

PHP 相关文章推荐
PHP 网络开发详解之远程文件包含漏洞
Apr 25 PHP
Linux编译升级php的详细方法
Nov 04 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
CI(CodeIgniter)框架中的增删改查操作
Jun 10 PHP
全新Mac配置PHP开发环境教程
Feb 03 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
Mar 28 PHP
php 无限分类 树形数据格式化代码
Oct 11 PHP
php实现评论回复删除功能
May 23 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
Oct 13 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
详细分析PHP7与PHP5区别
Jun 26 PHP
使用 MySQL Date/Time 类型
Mar 26 #PHP
MySQL修改密码方法总结
Mar 25 #PHP
用phpmyadmin更改mysql5.0登录密码
Mar 25 #PHP
常用的php ADODB使用方法集锦
Mar 25 #PHP
PHP中ADODB类详解
Mar 25 #PHP
php下判断数组中是否存在相同的值array_unique
Mar 25 #PHP
php获取mysql版本的几种方法小结
Mar 25 #PHP
You might like
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
php基于Snoopy解析网页html的方法
2015/07/09 PHP
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
js实现多个标题吸顶效果
2020/01/08 Javascript
Python矩阵常见运算操作实例总结
2017/09/29 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
python 日期操作类代码
2018/05/05 Python
使用Python机器学习降低静态日志噪声
2018/09/29 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
python实现倒计时小工具
2019/07/29 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
服装公司总经理岗位职责
2013/11/30 职场文书
办公室秘书自我鉴定
2014/01/18 职场文书
单位委托书范本
2014/04/04 职场文书
大型营销活动计划书
2014/04/28 职场文书
小学庆六一活动总结
2014/08/28 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
各种货币符号快捷输入
2022/02/17 杂记