美国Godaddy主机

海外主机侦探论坛

 找回密码
 注册

扫一扫,访问微社区

搜索
美国主机优惠信息汇总出售cPanel CloudLinux R1SoftGodaddy美国空间代购
国外主机资料导航支持支付宝付款的美国主机HostEase速度快中文客服!
查看: 9013|回复: 14

[教程] 教你调整PHP和MySQL的时区,实现同步显示中国时间

[复制链接]
发表于 2008-9-21 03:41:57 | 显示全部楼层 |阅读模式
Godaddy美国主机2014年半价优惠大促销
来了两三天了,没什么贡献,还因为同行汇款没有实时到帐的事情,和代购部产生了一些误会,怪不好意思的。

此帖算是我表示歉意,同时也给需要这方面知识的朋友们一点微薄的帮助吧。不知道以前有没有人写过,我没看到,写重了就当我罗嗦好了。高手就直接略过吧,都是比较基础的东西。OK,进入正题,免得大家真的嫌我罗嗦,呵呵。

作为一名资深而又严谨的程序员(没见过这么臭屁的人),我在第一时间就注意到了,美国主机的时间和我本地的时间严重不匹配。一想到时间,我就想到了我的汇款没有实时到帐,于是我就怒了,想把工行做转帐系统的程序员们拉出来杀之,但是我又不能犯法,所以只好忍了,改时间算了。这次真的罗嗦完了,别打我。

所谓的时间问题归根结底也就是“时区”问题,我们首先要知道的是:

1、美国时间和中国时间相差应该是8小时。
2、PHP的时间和MySQL的时间不是相同的。


所以,我们所要做的事情就是:

1、把美国时间改成中国时间。
2、并且要把PHP的时间和MySQL的时间统一。


一、修改PHP时间

听上去有点小复杂,其实很简单。首先我们来改PHP的时间,将这句代码插入到PHP程序中,公共调用页的顶部(也就是要include_once,require_once到的脚本里,当然你不用_once我也没有意见),确保需要用到时间的页面都必须调用到:

  1. date_default_timezone_set('PRC') or die('时区设置失败,请联系管理员!');
复制代码
现在测试下:

  1. echo date('Y-m-d H:i:s');
复制代码
怎么样?哇哈哈,正确显示中国时间了,当然你要说北京时间我也没意见。至于那个参数PRC是什么意思,我记得是某个神奇的土地之缩写,不用管它,照搬就行了,错不了的。成功了?NO,不要得意得太早,在MySQL里输入语句SELECT NOW();你会惊愕的发现,MySQL的时间还是美国时间。不急,我们继续下一步。



二、修改MySQL时间

如果你在写程序的时候,习惯了用类或者函数,那么恭喜你,这一步你同样只需要一次复制粘贴操作就能将它解决。如果你在写程序的从来不用类或者函数,那么我会祈祷耶稣和释迦牟尼一同保佑你,不会在改程序的时候累得很惨,同时希望你改掉这个不好的编程习惯。那么,就请在PHP程序有数据库连接的下一语句(只有1次,就加1句;若有无数次,就加无数次……这个编程习惯,还是重要啊)加入如下代码:

  1. mysql_query("SET time_zone = '+8:00'") or die('时区设置失败,请联系管理员!');
复制代码
再去SELECT NOW();下,你会惊喜地发现,MySQL也是中国时间了。为什么是+8:00呢?前面我说过了,中国时间和美国时间差8小时,往那个那个貌似向东还是向西的方向来着?(不好意思我是路盲,我在怪地球是圆的)。OK,现在MySQL的时间也搞定了,我相信现在就会有比较严谨朋友问了:那你如何证明PHP的时间和MySQL的时间是同步呢?啊……这个人与人之间的信任,还是重要的,就像汇款,哈哈,那我们来做个测试吧:

  1. //这里是页面的开头,用于改PHP时间的代码。
  2. date_default_timezone_set('PRC') or die('时区设置失败,请联系管理员!');

  3. //-------------------------------------------------------------
  4. //
  5. //      这里写数据库连接的代码,别懒,自己写。
  6. //
  7. //-------------------------------------------------------------

  8. //数据库一旦连接,紧跟着就是改MySQL时间的代码。
  9. mysql_query("SET time_zone = '+8:00'") or die('时区设置失败,请联系管理员!');

  10. //显示PHP的时间
  11. echo date('Y-m-d H:i:s');

  12. echo


  13. //显示MySQL的时间
  14. $mysql_time = mysql_query("SELECT NOW()");
  15. $mysql_rows = mysql_fetch_row($mysql_time);

  16. echo $mysql_rows[0];
复制代码
刷新,我再刷新,我还刷新,怎么样?打我啊。哇哈哈,一秒都不差哦。完全同步,这下你该满足了吧?呵呵。

在这里我要建议大家的是,在编程过程中,凡涉及操作时间的部分,最好统一用数据库的时间,这样可以避免无法实时到帐,呵呵(这13还在耿耿于怀)。

由于是现场直播,难免有疏漏之处,欢迎大家批评指正。我的网站都是我自主开发,目前HM上的站还没做完的,等做完会发出来给大家批的,若是大家赏脸的话,可以去我公司的主页看看www.hetty.cn(这站开做的时候已经是两年多前的事了,当时我对DIV+CSS还不熟,所以全是TABLE,大家莫笑我啊,还有高手们手下留情莫搞破坏啊,呵呵)

好了,我就臭屁到这里吧,以免引起公共不爽被群起而殴之,虽然不是什么好料,但转载时也请注明我那很女性化的英文名:hetty

[ 本帖最后由 hetty 于 2008-9-21 03:49 AM 编辑 ]

评分

参与人数 1金币 +3 收起 理由
一路同行 + 3 原创内容

查看全部评分

发表于 2008-9-21 09:37:10 | 显示全部楼层
RAKSmart美国主机商2014新春优惠大促销
厉害哦~收藏了
建议加精
发表于 2008-9-22 14:11:56 | 显示全部楼层
RAKSmart美国主机商2014新春优惠大促销
好文。
发表于 2008-9-23 02:44:05 | 显示全部楼层
RAKSmart美国主机商2014新春优惠大促销
真好,磕睡人绊倒在被窝上。。。那个合适。。。

[ 本帖最后由 鱼无言 于 2008-9-23 02:48 AM 编辑 ]
发表于 2008-9-23 07:12:21 | 显示全部楼层
RAKSmart美国主机商2014新春优惠大促销
美国和中国时差肯定不是8小时……

因为中国在东8区,所以是+8,这是和格林威治时间(0区)作比较
 楼主| 发表于 2008-9-23 13:59:54 | 显示全部楼层
美国服务器
谢谢斑竹加精,谢谢各位帮顶。

另谢谢polo9纠正我在时区概念上的错误,我对这方面知识薄弱
发表于 2008-9-24 12:53:25 | 显示全部楼层
Godaddy美国主机2014年半价优惠大促销
如果是独立主机或VPS,替换一下系统时间文件就一劳永逸了,不需要那么麻烦。
发表于 2008-9-24 15:04:08 | 显示全部楼层
Godaddy美国主机2014年半价优惠大促销
好文,根据本人测试,
PHP的时间相差是8小时,因为这是和格林威治时间对比
mysql的时间相差是15小时!因为这是和服务器地址时间对比!(LunarPages)
这样理解对吧?

[ 本帖最后由 gofond 于 2008-9-24 03:05 PM 编辑 ]
发表于 2008-9-25 22:28:07 | 显示全部楼层
Godaddy美国主机2014年半价优惠大促销
连接被重置      

载入页面时到服务器的连接被重置。

    *   此站点暂时不可用或者太忙。请稍后重试。

    *   如果您无法载入任何页面,请检查您计算机的网络连接。

    *   如果您的计算机受到防火墙或代理服务器的保护,请确认 Firefox  被授权访问网页。


打不开你的女性站
发表于 2008-9-25 22:30:07 | 显示全部楼层
HostEase美国主机商优惠码
在.htaccess加个SetEnv TZ Asia/Chongqing就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

论坛言论由会员发布,不代表本论坛观点;非交易论坛,本站不对会员间交易承担任何责任。

代购请联系本站客服



QQ|手机版|小黑屋|Archiver|海外主机侦探  

GMT+8, 2017-11-18 06:58 AM , Processed in 0.174116 second(s), 28 queries .

Copyright©2008-2017 | 关于我们

快速回复 返回顶部 返回列表