为什么php'date'函数返回错误的时间(关闭~24秒)?

Ale*_*lex 4 php mysql linux

phpgentooLinux 上运行以下小代码片段(php版本5.2.10-pl0-gentoo):

#!/usr/bin/php5
<?

class TestDaemon {
    public function __construct(){

        while (TRUE){

            unset($aDate);
            exec("date", $aDate);
            print("date(\"d.m.y H:i:s\") yields: ".date("d.m.y H:i:s")." while 'date' yields $aDate[0].\n");
            sleep(1);
        }
    }
}
$oDaemon = new TestDaemon();
?>
Run Code Online (Sandbox Code Playgroud)

产出的产量如下:

date("d.m.y H:i:s") yields: 27.03.14 07:05:27 while 'date' yields Thu Mar 27 07:05:03 UTC 2014.
date("d.m.y H:i:s") yields: 27.03.14 07:05:28 while 'date' yields Thu Mar 27 07:05:04 UTC 2014.
date("d.m.y H:i:s") yields: 27.03.14 07:05:29 while 'date' yields Thu Mar 27 07:05:05 UTC 2014.
date("d.m.y H:i:s") yields: 27.03.14 07:05:30 while 'date' yields Thu Mar 27 07:05:06 UTC 2014.
date("d.m.y H:i:s") yields: 27.03.14 07:05:32 while 'date' yields Thu Mar 27 07:05:07 UTC 2014.
date("d.m.y H:i:s") yields: 27.03.14 07:05:33 while 'date' yields Thu Mar 27 07:05:09 UTC 2014.
date("d.m.y H:i:s") yields: 27.03.14 07:05:34 while 'date' yields Thu Mar 27 07:05:10 UTC 2014.
date("d.m.y H:i:s") yields: 27.03.14 07:05:35 while 'date' yields Thu Mar 27 07:05:11 UTC 2014.
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,大约时间已经过去了.24秒 在另一台机器(相同的操作系统,相同版本的PHP)上,我没有看到这样的偏移.

这种抵消的原因是什么?这是否来自闰秒差异?那么哪个系统给出了正确的时间?为什么不php使用Linux系统时间呢?

此外,在同一系统上使用mysql数据库时,这个时间偏移是否会成为问题的根源?

Ste*_*len 5

这看起来像运行/ bin/date的shell被配置为使用"正确"的时区,并且php被配置为使用符合POSIX的时区.现在的差异应该是25秒,但如果tz数据超过两年,那么它将是24秒.有关为什么访问http://www.ucolick.org/~sla/leapsecs/amsci.html并查看第二个情节的图片."右"区域遵循绿线.POSIX区域需要在每个闰秒停止系统时钟,因此它们遵循蓝线的下降楼梯.[编辑以确定哪个使用哪种方法]