时间()保证是闰秒意识吗?

Pac*_*ier 7 php linux windows time hhvm

PHP手册指出time()返回 "当前的UNIX时间戳"  microtime()返回 "当前Unix时间戳和微秒"  ʙ.

但是,这些功能是否保证严格符合POSIX.1系统的功能相同

具体来说,以time() | 的输出方式插入闰秒 在第二天开始时向后microtime() 跳1秒(也就是在闰秒结束时),在下一个第一秒的整个过程中给我们重复的返回值 - 与新鲜的唯一值相对天?

例如,如果我们轮询time() | microtime()在1998 -12-31和1999 -01 -01的整个范围内,每微秒,在915 148 800 <= x <915 148 801范围内,每个值是否会出现两次?

Pro*_*ica 11

从PHP中的time()获取UNIX时间戳是一种特殊的野兽.

我花了很长时间才明白这一点,但是发生的事情是时间戳在闰秒期间增加,当闰秒结束时,时间戳(但不是UTC!)会跳回一秒钟.

这有一些重要的含义:

  • 您始终可以准确地将UTC转换为UNIX时间戳
  • 不能总是(对于所有时间点)从时间戳转换为UTC
  • Unix时间戳是非连续的,即它退后一步.(或者,它保持不变,不会增加2秒.)
  • 如果从UNIX时间戳转换为UTC时出现转换错误,则错误最多为2秒.(这意味着你可能会错误的一天.)
  • 回想起来,Unix时间戳会出现直线.这意味着如果您正在存储时间序列数据,并且您不关心每年一两秒钟的错误表示,那么您可以认为存储的带时间戳的数据是连续的.

解决方法

如果Unix时间戳突然没有突然支持也没有在2秒内保持不变怎么办?这正是谷歌为他们的服务器所做的事情.他们的解决方案是在很长一段时间内缓慢地将时间缩短几毫秒,使闰秒变换几乎无形地应用于应用程序.(就Google服务器上的应用程序和操作系统而言,IERS不再插入闰秒.)


Ang*_*lom 8

PHP是一种服务器端语言.time()函数将解析为该服务器的系统时间.如果服务器正在运行NTP守护程序,那么它将闰秒知道并相应地进行调整.PHP不知道这一点,但系统确实如此.