所以我要从mysql数据库中获取一个时间戳,并且想知道为什么所有的时间检查都不起作用。
echo "The time is " . date("Y-m-d h:i:s");
echo "</br>";
echo "Mysql Timestamp " . $row["Uptime"];
echo "</br>";
echo "Mysql Timestamp as strtotime" .strtotime($row["Uptime"]);
echo "</br>";
echo "strtotime Current Time". strtotime("now");
echo "</br>";
输出:
The time is 2018-08-18 12:42:55 Mysql Timestamp 2018-08-18 12:42:52 Mysql Timestamp as strtotime1534596172 strtotime Current Time1534552975
转换为字符串后,数字之间存在大约4000的差异。怎么回事,如何在不进行x-4000
的情况下解决此问题?
答案 0 :(得分:2)
差异是由于您所在的时区造成的。 date()
使用您的本地时区来计算时间,而strtotime("now")
和time()
使用UTC时间。比较:
echo "The time is " . date("Y-m-d h:i:s");
echo "</br>";
echo 'strtotime("now") is '. strtotime("now");
echo "</br>";
echo 'strtotime date("Y-m-d h:i:s") is '. strtotime(date("Y-m-d h:i:s"));
echo "</br>";
echo "time() is ". time();
echo "</br>";
输出(在时区Australia\Adelaide
中):
The time is 2018-08-17 09:06:35
strtotime("now") is 1534554395
strtotime date("Y-m-d h:i:s") is 1534511195
time() is 1534554395
现在尝试将时区设置为UTC
:
date_default_timezone_set('UTC');
echo "The time is " . date("Y-m-d h:i:s");
echo "</br>";
echo 'strtotime("now") is '. strtotime("now");
echo "</br>";
echo 'strtotime date("Y-m-d h:i:s") is '. strtotime(date("Y-m-d h:i:s"));
echo "</br>";
echo "time() is ". time();
echo "</br>";
输出-如您所见,所有表单都返回相同的值:
The time is 2018-08-18 01:07:21
strtotime("now") is 1534554441
strtotime date("Y-m-d h:i:s") is 1534554441
time() is 1534554441