PHP中关于系统时间和输出差距8小时的原因及解决方案

    在php中,如果想要输出系统的时间,我们可以用date()函数进行获取。

    具体的代码如下:

       <?php echo date("Y-m-d H:i:s");?> //输出系统的当前时间

    其中"Y"控制符代表四位的年数,"m"控制符代表系统当前的属于一年中的第几个月(有前导0),"d"控制符代表了一个月中的第几天(有前导数0),"H:i:s"表示当前的"小时数:分钟数:秒数"(均有前导0)。"H"代表24时计时法,可以替换成"h",代表非24时计时法。

    我们在这段代码写好后的本来愿望是输出系统的当前时间。假如系统的当前时间是:"2012-05-11 00:04:56",我们期望在执行了上面的语句后可以在网页文件中输出我们想要看到的当前系统时间,但是在执行了上面的语句后,我们发现输出的时间要比系统的时间 慢 8个小时 ,也就是说我们看到的在页面上面显示的文件是下面的时间:"2012-05-10 16:04:56";。

    原因是:虽然现在的时间标准是协调世界时(UTC),但是php5.0中,默认的时间格式依旧采用旧制的格林威治标准时间。在php 5.1.0以后,php.ini中引入了date.timezone ,默认的情况下是关闭着的,也就是说默认的情况下输出的时间是 格林威治时间(比北京时间慢 8小时)。

    解决的方法:

    一:php.ini文件

    在php.ini文件中查找 date.timezone ,找到该项后去掉前面的注释分号并且在等号后面加上时区标识符,例如中国的有以下三个:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为重庆,上海,乌鲁木齐),然后重新启动一下服务器,一般就可以解决;这种方法秩序操作一次就可以在以后的调用中不用再考虑失去的问题,所以极力的推荐使用这种方法。

    二:在脚本中直接写入

    具体的示例代码如下:

    <?php
    date_default_timezone_set('PRC');//此句用于消除时间差
    $date = date("Y-m-d H:i:s");

    echo $date; //输出

    ?>

    我们利用了date_default_timezone_set();函数设定时区,其中的PRC代表中国,当然也可以用上面提到的三种时区标识符。

    三:不适用 5.0以后的版本

    当然第三种方法看起来有点不太妥当,时代在发展,语言在发展,我们就应该跟上形势,否则终将被软件设计这个大业所淘汰!

评论
© 时光旅行者/Powered by LOFTER