我正在使用php和mysql来开发我的应用程序。对于此应用程序,时间起着重要作用,因为我想根据所选时区向我的用户显示数据。为此,我使用strtotime将时间转换为数字形式,但我只是注意到strtotime为所有时区返回相同的值。我编写了以下代码进行测试。
date_default_timezone_set("Asia/Kolkata");
echo date("Y-m-d H:i:s")." ------ ";
echo strtotime(date("Y-m-d H:i:s"))."<br/><br/>";
date_default_timezone_set("America/New_York");
echo date("Y-m-d H:i:s")." ------ ";
echo strtotime(date("Y-m-d H:i:s"));
但输出是
2013-01-28 15:40:11 ------ 1359367811
2013-01-28 05:10:11 ------ 1359367811
为什么返回值相同?
答案 0 :(得分:4)
strtotime()
返回“the number of seconds since January 1 1970 00:00:00 UTC”
答案 1 :(得分:1)
正如@Bobby的评论所述,“Unix时间戳总是UTC”。这意味着您实际上对UTC时区进行了两次等效转换。
考虑 1 timezone 中的 t 1 时间戳和相同的 t timezone a 3 时, 2 中的> 1 时间戳将产生相同的结果。在您的示例中,“相同结果”以秒为单位,但原理是相同的。
换句话说,在您的代码中,您将从看似两个不同的日期生成两个UNIX时间戳。但你实际上正在做的是生成相同时间点的两个不同但等效的表示(亚洲和美国时区)。然后,将两个等效表示转换为相同的第三个represntation(UTC时区)。
答案 2 :(得分:0)
根据strtotime
的PHP手册,
The function expects to be given a string containing an English date format and will try to parse that format into a Unix timestamp (the number of seconds since January 1 1970 00:00:00 UTC), relative to the timestamp given in now, or the current time if now is not supplied.
如上所述,strtotime将给定的日期格式转换为Unix时间戳,该时间戳是相对于Unix时期计算的。纪元是一个固定点,其定义与用户的时区无关,自那时起的秒数在所有时区相对相同。
设置时区仅影响时间戳值的解释。