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

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

time返回一个UNIX时间戳,它是时区无关的。 由于UNIX时间戳表示1970年以来的秒数,你可以说它是UTC,但它确实没有时区。


要清楚的是,UNIX时间戳在任何时候都是世界上相同的值。 在写1296096875文章的时候是1296096875在东京,伦敦和纽约。 要将其转换为“人类可读的”时间,您需要指定要显示的时区1296096875在东京是2011-01-27 11:54:35 ,在伦敦这是2011-01-27 02:54:35 ,在纽约是2011-01-26 21:54:35

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

  • 绝对的时间点,我喜欢把它称为人类历史上的点
  • 当地时间,我喜欢称之为挂钟时间
  • 以任何forms表示人类历史上的绝对点的完整时间戳
  • 不完整的当地挂钟时间

像这样可视化时间:

 -------+-------------------+-------+--------+----------------+------> | | | | | 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 ??? 

后者是一个更复杂但同样有效和expression的柜台,大致从这里开始:

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

UNIX时间戳很简单。 他们是在一个特定的时间点开始的一个柜台,并且每秒增加1(对于第二个是什么的官方定义)。 想象一下,伦敦有人在1970年1月1日的午夜开始了一个秒表,该表还在运行。 这或多或less是一个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一起使用。

由于PHP 5.1.0(重写date/时间函数时),如果时区无效,每次调用date/时间函数都将生成E_NOTICE,并且/或者在使用系统设置或TZ时发出E_WARNING消息环境variables。

所以为了得到一个UTC时间戳,你应该检查当前的时区是什么和解决这个问题, 或者只是使用:

 $utc_str = gmdate("M d YH:i:s", time()); $utc = strtotime($utc_str); 

http://us3.php.net/time

“返回自Unix时代(1970年1月1日00:00:00 GMT)以来秒数的当前时间。

所以我相信你的问题的答案是肯定的。

从文档

返回自Unix时代(1970年1月1日00:00:00 GMT)以来秒数的当前时间。