请理解,这个问题没有得到there的回答。因为如果他们在there中所说的是真的,时间戳应该根据给定时间的时区而变化。
我遇到了一个项目的问题,因为似乎服务器上设置的时区与收集数据的机器完全不同。当PHP中的默认时区更改时,时间戳是否会更改?是应该还是不应该?
php -r "date_default_timezone_set(\"Asia/Jakarta\");echo time();"
1397552668
php -r "echo time();"
1397552675
似乎它没有......我是对的吗?或者我做错了什么?
另一项测试:
<?php
echo date_default_timezone_get();
echo " : ".time();
echo "\n";
date_default_timezone_set("Asia/Jakarta");
echo date_default_timezone_get();
echo " : ".time();
echo "\n";
?>
结果:
Europe/Berlin : 1397553155
Asia/Jakarta : 1397553155
答案 0 :(得分:4)
您的问题似乎是date_default_timezone_set
所做的错误假设。但首先要从计算机如何保持时间开始:
现在看Does PHP time() return a GMT/UTC Timestamp?了解“本地”和“绝对”时间之间的区别。了解操作系统内部处理绝对时间(可能采用高分辨率UNIX时间戳的形式)至关重要。它不会以“HH:MM:SS”的形式保留时间,它只会根据您设置的时区显示 ,当它向您传达时间时,人类。
date_default_timezone_set
所做的只是选择显示人类可读时间的时区。它不会改变操作系统的时间或PHP对当前时间或其他任何内容的理解。它所做的只是告诉PHP当您执行date('H:i')
之类的操作时,显示哪个时区的本地时间。
答案 1 :(得分:0)
UNIX时间戳与时区无关,因此time()
应始终返回相同的值。其他时间操作函数(例如Date
或Datetime
)将取决于设置的时间戳,因此如果您使用UNIX时间戳进行进一步操作,您会注意到差异。