PHP手册指出time()
返回 "当前UNIX时间戳" ᴀ 和microtime()
返回 "当前Unix时间戳,并带有微秒" ʙ
但是,这些功能保证的行为是否像that of strictly conforming POSIX.1 systems一样?
具体来说,以time()
|的输出方式插入闰秒microtime()
在第二天开始时将向后跳1秒(也就是在闰秒结束时),让我们重复返回值 - 与新鲜唯一值相对 - 在第二天的整个第一秒的整个过程中?
例如,如果我们轮询time()
| {-1}}在1998 -12-31和1999 -01 -01的整个范围内,每微秒microtime()
,在915 148 800 <= x <915范围内每个值会出现两次148 801?
答案 0 :(得分:10)
从PHP中的time()获取UNIX时间戳是一种特殊的野兽。
我花了很长时间才明白这一点,但是发生的事情是时间戳在闰秒期间增加,当闰秒结束时,时间戳(但不是UTC!)会跳回一秒钟。
这有一些重要意义:
<强>变通方法强>
如果Unix时间戳突然没有突然支持,也不会在2秒内保持不变,该怎么办?这正是谷歌为他们的服务器所做的事情。他们的解决方案是slowly skew the time merely milliseconds at a time很长一段时间,使闰秒变换几乎无形地应用于应用程序。 (就Google服务器上的应用程序和操作系统而言,the IERS不再插入闰秒。)
答案 1 :(得分:8)
PHP是一种服务器端语言。 time()函数将解析为该服务器的系统时间。如果服务器正在运行NTP守护程序,那么它将闰秒知道并相应地进行调整。 PHP不知道这一点,但系统确实如此。
答案 2 :(得分:1)
time()
只返回UNIX-Timestamp。这意味着,它不受闰秒(等等)的影响,因为你永远不会“失去”时间,因为有人决定了它。只有文字表示(例如使用date()
创建)才会受到影响。