【发布时间】:2019-09-17 18:02:27
【问题描述】:
我有一个开发环境和一个生产环境。 time() 函数在我的开发环境中返回正确的时间戳,但在我的生产环境中 time() 正好落后 59 秒! 两种环境中的 PHP 版本均为 7.0.3。 这不可能是时区问题,因为差异只有一分钟,并且 PHP 默认时区在两种环境(美国/洛杉矶)中都是相同的。 现在是上午 10:48:29,这是在两种环境中同时调用此函数的输出(或者至少与我在控制台上按 Enter 键一样快)。
开发环境(正确)
php > echo date('h:i:s A');
10:48:29 AM
生产环境(落后一分钟)
echo date('h:i:s A');
10:47:31 AM
time() 函数也是如此
开发环境(正确)
php > echo time();
1568742851
生产环境(落后一分钟)
echo time();
1568742792
而 1568742851 - 1568742792 = 59 秒
我知道我可以将 59 秒添加到时间戳 time() 返回,但这似乎是一种 hack,并不能解决问题。我想请教一下如何修复我的生产环境。
【问题讨论】:
-
系统时钟中的一个是否可能没有显示正确的时间?
-
开发和生产环境是什么意思?这两个不同的操作系统、PC、虚拟机……?如果是这样,您确定它们在几秒钟内具有相同的时间吗?
-
环境位于不同的服务器中,但操作系统和 PHP 版本相同。 @g_bor 生产环境确实有不同的操作系统级系统时区设置为 UTC。这是 9 小时的差异,而不仅仅是一分钟,所以您认为这可能会导致 PHP 错误计算 UNIX epoc 吗???
-
不,我不相信。我认为其中一个系统的时间可能会关闭 59 秒。你有独立的方法来询问系统它认为它是什么吗?就像在 tty 中运行日期一样?
-
是的,我运行了 unix 命令 timedatectl,它显示了生产中使用 UTC 的系统时间。当我运行 php time() 函数时,它只显示了 59 秒,这很奇怪!
标签: ubuntu-16.04 php-7.0