为什么strtotime会为不同的时区返回相同的结果

时间:2013-01-28 10:21:46

标签: php strtotime unix-timestamp date-conversion

我正在使用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

为什么返回值相同?

3 个答案:

答案 0 :(得分:4)

答案 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时期计算的。纪元是一个固定点,其定义与用户的时区无关,自那时起的秒数在所有时区相对相同。

设置时区仅影响时间戳值的解释。