PHP手册指出, time()
返回 “当前的UNIX时间戳”  和microtime()
返回 “当前的Unix时间戳与微秒”ʙ 。
但是,这些function是否保证与严格符合POSIX.1标准的系统一样呢?
具体来说,闰秒插入的方式是输出time()
& hairsp; |  microtime()
在第二天开始时向后跳跃1秒(也就是在闰秒的末尾),在整个第一秒中给我们重复的返回值(与新鲜的独特值相反)那第二天?
例如,如果我们轮询time()
  |  在1998年-12-31年和1999年-01年的整个跨度内,每微秒microtime()
会有两次出现在915和148的范围内。 148 hairsp; 801?
PHP是一种服务器端语言。 time()函数将解析为该服务器的系统时间。 如果服务器正在运行一个NTP守护进程,那么它将闰秒知道并相应地进行调整。 PHP不知道这一点,但系统呢。
UNIX时间戳,就像你在PHP中从time()获得它一样,是一个奇怪的野兽。
我花了很长的时间才明白这一点,但是发生的事情是在闰秒内时间戳增加,而闰秒结束时,时间戳(但不是UTC!)会跳回一秒钟。
这有一些重要的含义:
解决方法
如果Unix时间戳既不突然跳跃也不会持续2秒? 这正是Google为他们的服务器所做的。 他们的解决办法是在很长的一段时间内只缓慢地扭曲时间仅仅几毫秒 ,使闰秒几乎无形地转移到应用程序上。 (就Google服务器上的应用程序和操作系统而言, IERS不再插入闰秒)。
time()
只返回UNIX-Timestamp。 这意味着,它不会受到闰秒(以及其他)的影响,因为你永远不会“失去”时间,只是因为有人决定。 只有文本表示(例如使用date()
创建)受到影响。