Php 为什么strotime对不同的时区返回相同的结果
我正在使用php和mysql开发我的应用程序。对于这个应用程序,时间扮演着重要的角色,因为我想根据用户选择的时区向他们显示数据。为此,我使用strotime将时间转换为数字形式,但我注意到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
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