php系统时区设置方法总结

2016-06-09 12:13:29 5529

php时区是一个非常有意思的问题,安装好apache+php环境之后会发现我们使用date函数获取的日期都与中国时间有8小时区别了,那?这个时区问题要如何解决呢?下面本人整理了一些关于php时区设置方法,有需要的朋友可进入参考.

时区划分

整个地球分为24个时区,每个时序都有自己的本地时间,同一时间,每个时区的本地时间相差1到23个小时,例如,英国伦敦本地时间与北京本地时间相差8个小时,在国际无线电通信领域,使用一个统一的时间,称为通用协调时间(UTC,Universal Time Coordinated),UTC与格林威治标准时间(GMT,Greenwich Mean Time)相同,都与英国伦敦的本地时间相同

时区设置

由于PHP5.0对data()函数进行?重写,因此,目前的日期时间函数比系统时间少8个小时。在PHP语言中默认设置的是标准的格林威治时间(即采用的是零时区),所以要获取本地当前的时间必须更改PHP语言中的时区设置。

更改PHP语言中的时区设置有两种方法:

(1)修改php.ini文件中的设置,找到[date]下的“;date.timezone=”选项,将其修改为“date.timezone=Asia/Hong_Kong”,然后重新启动Apache服务器。

修改PHP.ini这个文件,找到date.timezone这行,去掉前面的分号,改成:

date.timezone = Asia/Shanghai

修改 .htaccess文件,修改.htaccess文件有两种办法,下面的两条语句只要有一条即可:

php_value date.timezone Asia/Shanghai

SetEnv TZ Asia/Shanghai

(2)在应用程序中,在使用时间日期函数之前添加如下函数:

  1.  date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai'   亚洲/上海 

  2.  date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'为“亚洲/重庆” 

  3.  date_default_timezone_set('PRC');//其中PRC为“中华人民共和国” 

  4. i ni_set('date.timezone','Etc/GMT-8'); 

  5.  ini_set('date.timezone','PRC'); 

  6.  ini_set('date.timezone','Asia/Shanghai'); 

  7.  ini_set('date.timezone','Asia/Chongqing'); 

  8. date_default_timezone_set('PRC'); 

  9. //PRC为中华人民共和国时区 

  10. //或者 

  11. <?php  

  12.     date_default_timezone_set("Asia/Kolkata");  

  13.     echo date('d-m-Y H:i:s'); //Returns IST  

  14. ?> 

参数为PHP可识别的时区名称,如果时区名称PHP无法识别,则系统采用UTC时区,在PHP手册中提供了各个时区名称列表,其中,设置我国北京时间可以使用的时区包括:PRC(中华人民共和国)、Asia/Chongqing(重庆)、Asia/Shanghai(上海)或者Asia/Urumqi(乌鲁木齐),这几个时区名称等效的.

设置完成后,date()函数便可以正常使用,不会再出现时差问题.

输出系统的当前时间:

上面是一种设置系统当前时间的方法,在这里将采用另外一种方式设置系统当前的时间,即直接在date()函数之前通过date_default_timezone_set()函数设置系统的时区,并输出系统当前的日期和时间,代码如下:

  1. <?php 

  2. echo "UTC时间:".date("Y-m-d H:i:s");  //显示默认的UTC时间 

  3. date_default_timezone_set("PRC");      //使用中华人民共和国的时区 

  4. echo "<br>"

  5. echo "北京时间:".date("Y-m-d H:i:s");  //输出北京时间 

  6. echo "<br>"

  7. echo "中文时间:".date("Y年m月d日 H时i分s秒");  //输出中文格式时间 

  8. echo "<br>";  //开源软件:phpfensi.com 

  9. echo "当前时区:".date_default_timezone_get();   //获取当前时区 

  10. ?> 

测试,代码如下:

  1. <?php 

  2. date_default_timezone_set(‘Etc/GMT’); 

  3. //在输出时间之前设置时区,Etc/GMT为时间标准时间 

  4. echo(time());  //开源软件:phpfensi.com 

  5. echo(‘ 

  6. ’); 

  7. echo date(‘Y-m-d H:i:s’, time()); 

  8. echo(‘ 

  9. ’); 

  10. echo gmdate (“Y-m-d H:i:s”, time()); 

  11. echo(‘ 

  12. ’); 

  13. date_default_timezone_set(‘PRC’); 

  14. //在输出时间之前设置时区,PRC为中华人民共和国 

  15. echo(time()); 

  16. echo(‘ 

  17. ’); 

  18. echo date(‘Y-m-d H:i:s’, time()); 

  19. echo(‘ 

  20. ’); 

  21. echo gmdate (“Y-m-d H:i:s”, time()); 

  22. ?> 

  23. //结果: 

  24. 1276257131 

  25. 2010-06-11 11:52:11 

  26. 2010-06-11 11:52:11 

  27. 1276257131 

  28. 2010-06-11 19:52:11 

  29. 2010-06-11 11:52:11 

结论:time():标准时间戳

指返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间(指的是当前GMT标准时间)的秒数,它的值跟php系统设置的时区无关.

date():返回的是当前 GMT标准时间的本地化时间的“自定义格式”时间,跟php系统设置的时区有关.

gmdate():返回的是当前 GMT标准时间的“自定义格式”时间,跟php系统设置的时区无关.

unix时间戳:指的是当前(GMT标准)时间离unix纪元时间(1970-01-01 00:00:00)的秒数.

  1. date_default_timezone_set(‘Etc/GMT’); 

  2. //在输出时间之前设置时区,Etc/GMT为时间标准时间 

  3. echo(strtotime(’1970-01-01 08:00:00′)); 

  4. echo(‘ 

  5. ’); 

  6. date_default_timezone_set(‘PRC’); 

  7. //在输出时间之前设置时区,PRC为中华人民共和国 

  8. echo(strtotime(’1970-01-01 08:00:00′)); 

  9. ?> 

  10. //测试结果: 

  11. 28800 

strtotime(a):当前时间的GMT标准时间的unix时间戳,如果当前php系统的设置的时区不是GMT标准时区,则在应用strtotime(a)时,系统会自动把时间a折算成相?的GMT标准时间,然后计算这个时间的unix时间戳,跟php系统设置的时区有关.



提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: