当前位置: 首页 > 面试题库 >

PHP time()是否返回GMT / UTC时间戳?

萧自珍
2023-03-14
问题内容

我只想检查是否time()返回UTC / GMT时间戳,还是需要使用date_default_timezone_set()


问题答案:

time返回UNIX时间戳,该时间戳与时区无关。由于UNIX时间戳表示自1970年 UTC 以来的秒数,您可以说它是UTC,但实际上没有时区。

实际上,UNIX时间戳在任何给定时间在全世界范围内都是相同的值。在撰写本文时,它1296096875在东京,伦敦和纽约。要将其转换为“人类可读”的时间,您需要指定要显示的时区。1296096875在东京是2011-01-27 11:54:35,在伦敦是2011-01-27 02:54:35在纽约2011-01-26 21:54:35

实际上,在处理时间时,您通常要处理(混合)这些概念:

  • 绝对时间点,我想称为 人类历史 中的时间
  • 当地时间,我想称为 墙上时钟时间
  • 任何形式的完整时间戳,可以表达 人类历史上 的绝对 观点
  • 当地壁钟时间不完整

像这样可视化时间:

-------+-------------------+-------+--------+----------------+------>
       |                   |       |        |                |
Dinosaurs died        Jesus born  Y2K  Mars colonised       ???

(不按比例)

这条线上的 绝对点 可以表示为:

  • 1296096875
  • 2011年1月27日02:54:35欧洲/伦敦

两种格式都以不同的符号表示相同的绝对时间点。前者是一个简单的计数器,大致从此处开始:

                          start of UNIX epoch
                                  |
-------+-------------------+------++--------+----------------+------>
       |                   |       |        |                |
Dinosaurs died        Jesus born  Y2K  Mars colonised       ???

后者是一个复杂得多但同样有效且富有表现力的计数器,大致从此处开始:

              start of Gregorian calendar
                           |
-------+-------------------+-------+--------+----------------+------>
       |                   |       |        |                |
Dinosaurs died        Jesus born  Y2K  Mars colonised       ???

UNIX时间戳很简单。它们是一个计数器,它从一个特定的时间点开始,并且每秒增加1(对于秒的官方定义)。想象一下,伦敦有人在1970年1月1日午夜启动了秒表,该秒表仍在运行。这或多或少是UNIX时间戳。每个人都使用与那只秒表相同的价值。

人类可读的挂钟时间更为复杂,并且由于其在日常使用中被缩写且部分省略的事实而变得更加复杂。 02:54:35 表示 上图中
的时间轴上几乎没有任何内容。 2011年1月27日02:54:35 已经非常具体了,但仍可能意味着这条线上的各种不同点。
“当时钟在2011年1月27日 在欧洲伦敦的 02:54:35钟声响起时”,现在终于在这条线上成为明确的绝对点,因为只有一个时间点是正确的。

因此,时区是“挂钟时间”的“修饰符”,使用日历和时/分/秒表示法来表示唯一的绝对时间点是必需的。如果没有时区,则这种格式的时间戳会模棱两可,因为2011年1月27日,全球每个国家/地区的时钟在不同时间响起02:54:35。

UNIX时间戳固有地不存在此问题。

要从UNIX时间戳转换为人类可读的挂钟时间,您需要指定想要显示的时间所在的时区。要将挂钟时间转换为UNIX时间戳,您需要知道该挂钟时间所在的时区应该在每次这样的转换中每次都包含时区,或者设置要与一起使用的默认时区date_default_timezone_set



 类似资料:
  • 我想以毫秒为单位获取当前的UTC时间。我搜索了一下google,得到了System.currentTimeMillis()确实返回UTC时间的一些答案。但事实并非如此。如果我做了以下事情: 所有三个时间几乎相同(由于通话时间不同,时间相差毫秒)。 这个时间不是UTC时间,而是我的时区时间。如何在android中获取当前UTC时间?

  • 问题内容: 我想以毫秒为单位获取当前UTC时间。我搜索了google,并得到了一些System.currentTimeMillis()确实返回UTC时间的答案。但事实并非如此。如果我执行以下操作: 这三个时间几乎都相同(由于通话,相差以毫秒为单位)。 这不是UTC时间,而是我的时区时间。如何在Android中获取当前UTC时间? 问题答案: 您显示的所有三行都将给出自unix纪元以来的毫秒数,这是

  • Python时间模块中的是否返回系统的时间或UTC时间?

  • 时间从宇宙诞生之日起就存在,时间也和我们现在的生活息息相关。在软件系统中更是经常会处理和时间相关的问题。如果读者使用的是Windows操作系统,会在任务栏的右边显示当前的时间。这个时间一般就是用户所有国家或地区的本地时间。 由于地球自转的原因,产生了24个时区。也就是说,将地球按经度划分,每15度是一个时区。每相临的两个时区相差1个小时。这就会带来一个非常大的问题。由于世界不同的国家或地区分布在不

  • 问题内容: 我真的对方法调用的结果感到困惑,因为它返回了IST时间。 这是我使用的代码 我得到的答复是: 所以我尝试将默认的TimeZone更改为UTC,然后检查了一下,然后工作正常 结果: 我在这里想念什么吗? 问题答案: 该调用返回的。正是它将转换为的字符串,并且这种转换将使用您所用的默认时区。 您需要明确使用来在所需的时区中打印。 编辑:@Laurynas的礼貌,请考虑以下事项:

  • 我想将datetime-local从html转换为UTC时间: html: Java: 即本地时间(GMT 8),我想将其转换为UTC字符串时间 例如:转换为- 我搜索了很多资源,但仍然不知道怎么做。