为什么strtotime在不同的时区给出不同的结果?
我不知道为什么strtotime()
在PHP中返回不同的结果在不同的时区,即使相同的日期作为参数给出,没有人知道答案吗?我也想知道,是否可以执行类似的任务(将datetime
转换为int
以便轻松进行计算)和另一个在不同时区给出相同结果的函数?为什么strtotime在不同的时区给出不同的结果?
编辑:
一个例子: 如果我使用strtotime('2011-09-19 00:00:00')
不应该只是返回秒'January 1 1970 00:00:00'
和'2011-09-19 00:00:00'
之间的区别?为什么时区在这里是个问题?我可以得到一些不带时区问题的差异吗?
简而言之:时区被认为是因为Unix时代值被认为是GMT。
在更广泛的意义2011-09-19 00:00:00
谈到孟加拉国6小时它是在GMT区2011-09-19 00:00:00
经过近。由于这一差距,在BD中出现同一日期时,格林威治标准时间区域又过了21600
秒。
由于计算是根据GMT完成的,所以您必须添加这些21600
秒以获得实际差异。
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。
从PHP手册:
该函数将使用TZ环境变量(如果有的话)来计算时间戳。自PHP 5.1.0起,有更简单的方法来定义所有日期/时间函数中使用的时区。该过程在date_default_timezone_get()函数页面中进行了解释。
谢谢,我已经更新了一个例子的问题,请看看 – Usman
使用date_default_timezone_set
调用日期/时间函数来选择你要在其中工作哪个时区前
http://www.php.net/manual/en/function.date-default-timezone-set.php
谢谢,我已经更新了一个例子的问题,请看一看 – Usman
我想大概每个php程序员都会有一次这个函数会让他真的想明白php实际上是如何处理日期和时间函数的。
有趣的是,当你尝试像...... err这样的功能......例如,假设今天在这个时刻是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和上述第2行的$ Y甚至不会返回同样的事情,你忽略分钟第二次计数,但如果您的服务器在美国的某个地方,格林威治标准时间为-5小时,但您的浏览器在夏季时间从柏林呼叫此功能,那么$ z将在25200或7小时左右,其中GMT +2小时...大声笑现在你可以知道PHP如何使用这个功能;)
这并不能解决问题。 –
因为不同时区的时间不同, –
你能提供一些你想要做的事吗? –
@jeffamaphone我给出了相同的日期时间作为参数,它不应该将它转换为int,与时区有什么关系,这是我想知道的吗? – Usman