strtotime方法使用前请注意系统时区

strtotime在将一个潜在的时间字符串转换为正确的时间时,会使用到当前系统时区。如果系统时区与所给目标字符串所示时区不一样时,那么在调用后,其生成的时间将与想象中的时间有时间偏差。因此,需要在调用该方法前,首先确定当前系统时区。

我们可以调用date_default_timezone_get()获取当前时区。通常默认的时区为UTC也就是标准时区+0000;设置系统时区有两种方式:

1、修改php.ini配置文件。

[Date]
; Defines the default timezone used by the date functions
;date.timezone =

将上述部分的date.tiemzone放开,并设置为需要的时区

2、在需要设置时区的地方调用date_default_timezone_set()方法来设置时区。

下面我们就以"Sat May 14 22:35:44 +0800 2011"为例进行说明。我们的目标是获取其中的'22:35:44'时间。

可以看到'Sat May 14 22:35:44 +0800 2011'为+0800时区,也就是所谓的北京时间了。那么我们需要在strtotime该字符串前,确保系统时区为北京时区。PHP中北京时区可以用PRC表示。如果是PHP5+也可用Asia/Shanghai或者Asia/Chongqing来设置。

这里我们采用第二种方式来设置系统时区。我们的测试代码如下:

<? $str = 'Sat May 14 22:35:44 +0800 2011'; $current_timezone = date_default_timezone_get(); $strTtime = strtotime($str); ?> <table border = '1'> <caption>未设定时区前</caption> <tr> <td>时间字符串</td> <td><?=$str?></td> </tr> <tr> <td>当前时区</td> <td><?=$current_timezone?></td> </tr> <tr> <td>字符转化后日期格式('r')</td> <td><?=date('r',$strTtime)?></td> </tr> <tr> <td>字符转化后日期格式('H:i:s')</td> <td><?=date('H:i:s',$strTtime)?></td> </tr> </table> <br/></br> <? date_default_timezone_set('Asia/Shanghai'); $l_current_timezone = date_default_timezone_get(); $l_strTtime = strtotime($str); ?> <table border = '1'> <caption>设定时区后</caption> <tr> <td>时间字符串</td> <td><?=$str?></td> </tr> <tr> <td>当前时区</td> <td><?=$l_current_timezone?></td> </tr> <tr> <td>字符转化后日期格式('r')</td> <td><?=date('r',$l_strTtime)?></td> </tr> <tr> <td>字符转化后日期格式('H:i:s')</td> <td><?=date('H:i:s',$l_strTtime)?></td> </tr> </table> <? //使用完成后,还原到系统默认的设置 date_default_timezone_set($current_timezone); ?>

显示结果如下:

未设定时区前
时间字符串Sat May 14 22:35:44 +0800 2011
当前时区UTC
字符转化后日期格式('r')Sat, 14 May 2011 14:35:44 +0000
字符转化后日期格式('H:i:s')14:35:44

设定时区后
时间字符串Sat May 14 22:35:44 +0800 2011
当前时区Asia/Shanghai
字符转化后日期格式('r')Sat, 14 May 2011 22:35:44 +0800
字符转化后日期格式('H:i:s')22:35:44

注意: 在使用第二种方式时,在使用完成后,应将系统时区还原到初始设置。避免后续调用错误。

PS: 其他的时区设置及代码中涉及到的方法,可以通过查看PHP API了解更多的用法。PHP: PHP 手册 - Manual

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值