我不确定为什么PHP中的strtotime()
会在不同的时区返回不同的结果,即使相同的日期作为参数给出,是否有人知道答案?我还想知道,我可以使用另一个在不同时区提供相同结果的函数执行类似的任务(将datetime
转换为int
以便轻松进行计算)吗?
修改
一个例子:
如果我使用strtotime('2011-09-19 00:00:00')
不应该只是在几秒钟内返回'January 1 1970 00:00:00'
和'2011-09-19 00:00:00'
之间的差异?为什么时区是一个问题?我可以得到一些没有时区问题的东西吗?
答案 0 :(得分:7)
简而言之:考虑时区是因为在GMT中考虑了Unix Epoch值。
广义而言,2011-09-19 00:00:00
几乎在6小时之后来到孟加拉国,在格林尼治标准时间区2011-09-19 00:00:00
。由于存在此差距,当BD中显示相同日期时,GMT区域中已经过了另外21600
秒。
由于计算是针对GMT进行的,因此您必须添加这些21600
秒以获得实际差异。
答案 1 :(得分:6)
strtotime
在不同时区给出不同的结果,因为它需要考虑时区...
该函数期望给出一个包含英文日期格式的字符串,并尝试将该格式解析为Unix时间戳(自1970年1月1日00:00:00 UTC以来的秒数)
此函数将使用TZ环境变量(如果可用)来计算时间戳。从PHP 5.1.0开始,有更简单的方法来定义在所有日期/时间函数中使用的时区。该过程在
date_default_timezone_get()
功能页面中进行了解释。
查看mktime()
。
自PHP 5.1起,您可以在致电mktime
或strtotime
之前使用date_default_timezone_set。
答案 2 :(得分:1)
从PHP手册:
此函数将使用TZ环境变量(如果可用)来计算时间戳。从PHP 5.1.0开始,有更简单的方法来定义在所有日期/时间函数中使用的时区。该过程在date_default_timezone_get()函数页面中进行了解释。
答案 3 :(得分:1)
在拨打日期/时间功能之前使用date_default_timezone_set
选择您要使用的时区。
http://www.php.net/manual/en/function.date-default-timezone-set.php
答案 4 :(得分:1)
来自strtotime
上的PHP docs:
此函数将使用TZ环境变量(如果可用) 计算时间戳。从PHP 5.1.0开始,有更简单的方法 定义在所有日期/时间函数中使用的时区。那 在date_default_timezone_get()函数页面中解释了该过程。
答案 5 :(得分:0)
我想可能每个php程序员都会有一次这个函数会让他真正理解php实际上是如何使用日期和时间函数的。
当你尝试像......错误的时候,这个功能很有趣...例如,假设今天就在这个时刻是2012年7月11日13:00:00(2012-07-11 13:00:00 )然后你尝试使用strtotime找到一天中的完全相同的时刻,但是明天:$x = strtotime('2012-07-12 13:00:00');
$y = strtotime('+1 Day');
$z = $x-$y;
即使你忽略了分钟和秒数,上面前两行中的$ x和$ y也不会返回同样的东西,但是如果你的服务器是服务器,那么$ z将在这两行之间的差异大约是25200或大约7小时在美国的某个地方,格林威治标准时间是-5小时,但是你在夏天浏览器从柏林调用这个函数,格林威治标准时间是+2小时......现在你可以了解php如何使用这个函数;)