Php 为什么strotime对不同的时区返回相同的结果

Php 为什么strotime对不同的时区返回相同的结果,php,strtotime,unix-timestamp,date-conversion,Php,Strtotime,Unix Timestamp,Date Conversion,我正在使用php和mysql开发我的应用程序。对于这个应用程序,时间扮演着重要的角色,因为我想根据用户选择的时区向他们显示数据。为此,我使用strotime将时间转换为数字形式,但我注意到strotime为所有时区返回相同的值。我编写了以下代码进行测试 date_default_timezone_set("Asia/Kolkata"); echo date("Y-m-d H:i:s")." ------ "; echo strtotime(date("Y-m-d H:i:s"))."<br

我正在使用php和mysql开发我的应用程序。对于这个应用程序,时间扮演着重要的角色,因为我想根据用户选择的时区向他们显示数据。为此,我使用strotime将时间转换为数字形式,但我注意到strotime为所有时区返回相同的值。我编写了以下代码进行测试

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"));

为什么返回值相同?

strotime()
返回“”

strotime()
返回“”

正如@Bobby的注释所述,“Unix时间戳总是UTC”。这意味着您实际上要对UTC时区进行两次等效转换

假设a1时区中的t1时间戳和a2中相同的t1时间戳在转换到a3时区时会产生相同的结果。在您的示例中,“相同的结果”以秒为单位,但原理是相同的


换句话说,在代码中,您从两个不同的日期生成了两个UNIX时间戳。但实际上,您所做的是生成同一时间点的两个不同但等效的表示(亚洲时区和美国时区)。然后将两个等效表示转换为相同的第三个表示(UTC时区)。

正如@Bobby的注释所述,“Unix时间戳始终是UTC”。这意味着您实际上要对UTC时区进行两次等效转换

假设a1时区中的t1时间戳和a2中相同的t1时间戳在转换到a3时区时会产生相同的结果。在您的示例中,“相同的结果”以秒为单位,但原理是相同的


换句话说,在代码中,您从两个不同的日期生成了两个UNIX时间戳。但实际上,您所做的是生成同一时间点的两个不同但等效的表示(亚洲时区和美国时区)。然后将两个等效表示转换为相同的第三个表示(UTC时区)。

根据PHP手册中的
strotime

函数希望得到一个包含英文日期格式的字符串,并将尝试将该格式解析为Unix时间戳(自1970年1月1日00:00:00 UTC以来的秒数),相对于now中给出的时间戳,或者如果now未提供,则解析为当前时间。

如上所述,strotime将给定的日期格式转换为Unix时间戳,该时间戳是相对于Unix历元计算的。历元是一个固定点,它的定义独立于用户的时区,从那以后的秒数在所有时区中相对来说都是相同的


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

根据PHP手册的
strotime

函数希望得到一个包含英文日期格式的字符串,并将尝试将该格式解析为Unix时间戳(自1970年1月1日00:00:00 UTC以来的秒数),相对于now中给出的时间戳,或者如果now未提供,则解析为当前时间。

如上所述,strotime将给定的日期格式转换为Unix时间戳,该时间戳是相对于Unix历元计算的。历元是一个固定点,它的定义独立于用户的时区,从那以后的秒数在所有时区中相对来说都是相同的


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

除此之外。在函数中手动指定时差以获取时间戳,如strotime(“time_格式-0700”);除此之外。在函数中手动指定时差以获取时间戳,如strotime(“time_format-0700”);
2013-01-28 15:40:11 ------ 1359367811

2013-01-28 05:10:11 ------ 1359367811