当前位置: 首页 > 后端技术 > PHP

关于时区的php学习笔记

时间:2023-03-30 01:12:37 PHP

下面科普一下什么是时区。众所周知,地球在绕太阳公转的同时也在自转,所以不同的地区在同一时间接受到的阳光是不同的,所以有的地区有日出,有的地区有日落,有的地区可能是夜晚。由于地球上不同地区有不同的时间,因此必须有一个统一的时间尺度,以方便文化和技术交流。否则,每个人都在谈论当地时间。这不就乱套了吗?如果有问题,就必须解决。不同地区不同的时间需要统一的时间标准,而统一时间标准的前提是要搞清楚全球时差在哪里,各个地方的本地时间是如何相互换算的。最初的时间标准是格林威治标准时间。随着精确计时发展的需要,已经被新的时间标准所取代,目前的时间标准是UniversalCoordinatedTime。现在有了统一的时间标准,不同地区的时间可以先转换成世界协调时间,再转换成本地时间。同时不会有不同的时间!示例:北京时间(UTC+8):2019-05-3013:30:00世界时间(UTC):2019-05-3005:30:00东部时间(UTC-5):2019-05-3000:30:00GreenwichMeanTime格林威治标准时间(又称GreenwichMeanTime或GreenwichMeanTime,英文为GreenwichMeanTime,简称GMT),格林威治标准时间的中午是指当前太阳穿过太阳的时间格林威治子午线(即格林威治标准时间)。格林威治是英国伦敦的一个小镇,是地理经度的起点。本初子午线所在经度为零经度,所在时区为零时区。我们知道一天有24小时,对应世界上的24个时区,地球自西向东自转。零时区之后是东1区到东11区,然后是东12区。然后是西12区,西12区到西1区,最后回到零时区。其中,东十二区和西十二区为同一时区,又称东西十二区。一般来说,时区分为东十二区和西十二区和零时区,其中东西十二区是同一时区,所以一共有24个时区。例:由于北京位于东八区,比零时区多了8个时区,也就是说北京时间比GreenStandard时间快了8小时。因此,北京时间中午12:00,格林威治才凌晨4点,估计还在睡觉!(GMT+8为北京时间)格林威治标准时间与地球自转有关,不能满足准确计时,因此不再作为标准时间使用,取而代之的是协调世界时。CoordinatedUniversalTimeCoordinatedUniversalTime(又称世界时或通用标准时间或国际协调时间,英文为CoordinatedUniversalTime,简称UTC),协调世界时以原子时和秒的长度为基础,是一种在时间上尽可能接近格林威治标准时间的时间计量系统。在不需要精确到秒的情况下,GMT和UTC基本相同,只是UTC是基于更精确的原子时,所以常用于科学计算领域,也是时间计量的统一标准。例:北京时间12:00,换算成GMT或UTC时间为04:00(UTC+8也是北京时间)北京时间北京时间(又称中国标准时间),是首都北京所在的时区。作为中国标准时间,比格林威治标准时间快8小时。有五个时区,东六、东七、东八、东九。因此,国家统一采用首都北京所在的东八时区的时区为标准时间,即北京时间。时区信息数据库时区信息数据库,又称奥尔森数据库,是主要用于计算机程序和操作系统协同编辑世界时区信息的数据库。时区信息数据库采用“地区/位置”命名约定,便于在计算机世界中的应用。英文地名中的空格用下划线“_”代替,只有在包含英文地名本身时才使用连字符“-”。例子:Asia/Hong_Kong:Asia/HongKongAsia/Macau:Asia/MacaoAsia/Shanghai:Asia/ShanghaiAsia/Taipei:Asia/TaipeiAsia/Urumqi:Asia/Urumqi上面说的时区主要是支持的中国时区通过PHP。请参阅亚洲支持的时区列表。时区的编程不仅仅是现实生活中的问题。计算机编程世界也有时间,自然离不开时区的概念。在计算机世界中,一切都是数据,最佳时区的概念也可以在相关数据库中得到体现。好在有前辈给我们提供了时区信息库,各种语言基本都提供了时区工具。.php中的日期时间函数库是php内置的函数库。我们可以方便的操作时间,设置时区等。一般情况下,日期扩展是默认开启的。我们可以输入phpinfo打印出php的基本信息,然后搜索关键字date就可以找到日期扩展的相关信息。示例";//获取当前时区echo"Currenttimezone:"。date_default_timezone_get()."<br/>";//当前时间echo"Currenttime:".date("Y-m-dH:i:s")."
";//打印php信息phpinfo();?>Resultdefaulttimezone:当前时区:UTC当前时间:2019-05-3005:30:00选项值date/timesupport(日期时间支持)enabled(启用)timelibversion(时间库版本)2016.05(2016.05)"Olson"TimezoneDatabaseVersion(奥尔森时区数据库版本)2018.5(2018.5)TimezoneDatabase(时区数据库)internal(内部)Defaulttimezone(默认时区)UTC(协调世界时)可以看出,如果不设置时区,默认时区是协调世界这个时区比北京时间慢8小时!设置时区有3种姿势,目前支持的所有时区列表可以在php开发文档中找到主要时区中国的时间整理如下。/澳门:亚洲/澳门亚洲/上海:亚洲/上海亚洲/台北:亚洲/台北亚洲/乌鲁木齐:亚洲/乌鲁木齐共同时区是上海,没有北京。当然也可以设置为PRC(中华人民共和国)!如果不设置时区,则默认时区应为协调世界时(UTC)。虽然是通用时间标准,但还是需要转换成本地时间,看起来不太舒服。所以最好修改时区设置项,如果业务不考虑国际化需求,那么永久固定时区就可以了。如果有国际业务场景,最好动态设置时区,这样可以清楚知道当地时间。所以下面主要提供了两种设置时区的方法,分别是静态设置和动态设置,动态设置提供了两种方法。php配置的静态修改php的默认配置文件位于:/private/etc/php.ini,打开文件后修改日期.timezone选项。由于该方法是直接修改配置文件,所以时区设置适用于所有脚本,但需要重启服务器才能生效。示例[日期];定义日期函数使用的默认时区离子;http://php.net/date.timezone;date.timezone=;http://php.net/date.default-latitude;date.default_latitude=31.7667;http://php.net/date.default-longitude;date.default_longitude=35.2333;http://php.net/date.sunrise-zenith;date.sunrise_zenith=90.583333;http://php.net/date.sunset-zenith;date.sunset_zenith=90.583333Result#删除;并设置时区,值可以是PRC或者Asia/Shanghai等其他时区当前脚本默认时区选项。时区的静态设置只适用于固定时区的情况。如果需要动态切换时区,修改配置文件不能满足这种情况。因此php也提供了动态修改php.ini配置文件的方法,ini_set()方法只是支持动态设置时区。不需要重启服务器,但只对当前脚本生效,以ini_set方法支持的php.ini配置选项列表为例//设置当前时区ini_set("date.timezone","Asia/Tokyo");//获取默认时区echo"Currenttimezone:".ini_get("date.timezone")."
";//当前时间echo"Currenttime:".date("Y-m-dH:i:s")."
";Result当前时区:Asia/Tokyo当前时间:2019-05-3014:30:00动态设置php时区date_default_timezone_set方法用于设置当前脚本的默认时区。ini_set虽然支持设置时区选项,但毕竟不是专业的时区设置方式。date_default_timezone_set是一种设置时区的特殊方式。这两种方法都属于时区的动态设置,也全部对当前脚本生效,无需重启服务器,立即生效。示例//获取当前时区echo"Currenttimezone:".date_default_timezone_get()."
";//设置当前时区date_default_timezone_set("UTC");//获取当前时区echo"Currenttimezone:".date_default_timezone_get()."
";//Currenttimeecho"Currenttime:".date("Y-m-dH:i:s")."
";ResultCurrenttimezone:Asia/Tokyo当前时区:UTC当前时间:2019-05-3005:30:00关于时区的一些总结一个地区的时间可以很容易地转换为另一个地区的当地时间。目前世界统一时间标准为协调时间(UTC),中国时间标准为北京时间,比UTC快8小时。现实世界中的时区也应反映在计算机世界中,时区信息数据库用于表示现实世界中的时区概念。可见时区是一个通用的概念,不仅在php中,在java、js等语言中也有时区的概念,可以说只要有时间,就离不开时间时区。关于时区的小技巧,你掌握了吗?美剧《闪电侠》将于当地时间周二晚8点开播。北京时间什么时候开播?英剧《神探夏洛克》北京时间凌晨4点30分开播。当地时间是什么时候??参考资料时区相关知识识字时区时差时间换算