请问这两台服务器的 date( "Y-m-d H:i:s", time() ) 执行结果为什么不一样?

2017-05-26 12:12:58 +08:00
 gdtv

(为什么 V2EX 的 markdown 不支持表格呢?)

服务器#1 的系统时间:

# date -R
Fri, 26 May 2017 11:48:48 +0800

服务器#2 的系统时间:

# date -R
Fri, 26 May 2017 11:48:48 +0800

服务器#1 的 phpinfo()结果:

服务器#2 的 phpinfo()结果:

PHP 代码:

date_default_timezone_set("UTC");
ini_set("date.timezone","UTC");
echo "date_default_timezone_set: " . date_default_timezone_get()."<br>";
echo "date.timezone: " . ini_get("date.timezone")."<br>";
echo "time: " . time()."<br>";
echo "date: " . date( "Y-m-d H:i:s", time() );

服务器#1 代码执行结果:

date_default_timezone_set: UTC
date.timezone: UTC
time: 1495770528
date: 2017-05-26 03:48:48 (疑问,为什么这里输出的结果不一样?)

服务器#2 代码执行结果:

date_default_timezone_set: UTC
date.timezone: UTC
time: 1495770528
date: 2017-05-26 11:48:48 (疑问,为什么这里输出的结果不一样?)
3427 次点击
所在节点    PHP
17 条回复
dangyuluo
2017-05-26 12:16:54 +08:00
打印一遍所有的系统变量看看时区
oh
2017-05-26 12:25:58 +08:00
正好相差 8 小时
xiaoz
2017-05-26 12:34:45 +08:00
其中一个系统使用的格林威志,正好差 8 小时。
Yunhao
2017-05-26 12:40:41 +08:00
时间戳是一样的,那时间肯定是相同的。看看系统默认时区吧,一个是 UTC 另一个可能是 Asia/Shanghai
gdtv
2017-05-26 12:55:13 +08:00
@xiaoz 上面已经有说明,两个系统的时区都是 +0800
gdtv
2017-05-26 12:56:39 +08:00
@Yunhao 上面已经有说明,两个系统的时区都是 +0800
forelegance
2017-05-26 12:57:01 +08:00
这个问题,之前有人问过的。timezone,timezone, timezone
gdtv
2017-05-26 12:57:08 +08:00
@dangyuluo 系统变量是$_SERVER 吗? 我看了这里面好像没有时区相关的东西
lenmore
2017-05-26 13:00:33 +08:00
检查一下
cat /etc/sysconfig/clock
ll /etc/localtime
是否一致。
参考: http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/set-time.html
infong
2017-05-26 13:03:46 +08:00
最后一条用 date('c'); 输出看看。
另外再看看 /etc/timezone 与 /etc/adjtime,如果有的话。
估计是 locale 或者是「硬件时间」引起的。
gdtv
2017-05-26 13:28:47 +08:00
@lenmore

在 服务器#1 (正常的服务器)上面:
[root@xxx ~]# cat /etc/sysconfig/clock
ZONE="UTC"
[root@xxx ~]# ll /etc/localtime
-rw-r--r-- 1 root root 388 May 26 13:03 /etc/localtime

在 服务器#2 (不正常的服务器)上面:
[root@xxx ~]# cat /etc/sysconfig/clock
cat: /etc/sysconfig/clock: No such file or directory
[root@xxx ~]# ll /etc/localtime
lrwxrwxrwx. 1 root root 29 Feb 3 03:52 /etc/localtime -> ../usr/share/zoneinfo/Etc/UTC

这是什么意思呢? 看不懂。
vvchen
2017-05-26 13:33:09 +08:00
用 dpkg-reconfigure tzdata ( debian /ubuntu )或者 timedatectl set-timezone ( centos )统一设置下时区
gdtv
2017-05-26 13:34:38 +08:00
@infong

测试代码:

date_default_timezone_set("UTC");
ini_set("date.timezone","UTC");
echo "date_default_timezone_set: " . date_default_timezone_get()."<br>";
echo "date.timezone: " . ini_get("date.timezone")."<br>";
echo date('c');

在 服务器#2 (不正常的服务器)上显示结果:

date_default_timezone_set: UTC
date.timezone: UTC
2017-05-26T13:32:29+08:00

在 服务器#2 (不正常的服务器)上面, 文件 /etc/timezone 不存在,文件 /etc/adjtime 的内容是:

0.0 0 0.0
0
UTC
gdtv
2017-05-26 13:45:02 +08:00
@vvchen 在 服务器#2 (不正常的服务器)上执行:

timedatectl set-timezone UTC
timedatectl set-timezone "UTC"
timedatectl set-timezone "Asia/Shanghai"

对上面帖子里的 php 代码的执行结果无影响
hcivincentchan
2017-05-26 16:46:02 +08:00
两台服务器的操作系统版本和 php 版本是什么?
gdtv
2017-05-26 16:54:29 +08:00
@hcivincentchan

服务器#1 操作系统:
CentOS 6.6 32bit

服务器#2 操作系统:
CentOS 7.3 64bit

服务器#1 PHP:
5.4.39

服务器#2 PHP:
5.6.30
yuzunzhi
2017-05-27 10:16:38 +08:00
centos 7 请使用 timedatectl 命令查看时区^_^

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/363974

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX