2011-09-03 119 views
3

我不知道为什么strtotime()在PHP中返回不同的结果在不同的时区,即使相同的日期作为参数给出,没有人知道答案吗?我也想知道,是否可以执行类似的任务(将datetime转换为int以便轻松进行计算)和另一个在不同时区给出相同结果的函数?为什么strtotime在不同的时区给出不同的结果?

编辑:

一个例子: 如果我使用strtotime('2011-09-19 00:00:00')不应该只是返回秒'January 1 1970 00:00:00''2011-09-19 00:00:00'之间的区别?为什么时区在这里是个问题?我可以得到一些不带时区问题的差异吗?

+5

因为不同时区的时间不同, –

+0

你能提供一些你想要做的事吗? –

+0

@jeffamaphone我给出了相同的日期时间作为参数,它不应该将它转换为int,与时区有什么关系,这是我想知道的吗? – Usman

回答

7

简而言之:时区被认为是因为Unix时代值被认为是GMT。

在更广泛的意义2011-09-19 00:00:00谈到孟加拉国6小时它是在GMT区2011-09-19 00:00:00经过近。由于这一差距,在BD中出现同一日期时,格林威治标准时间区域又过了21600秒。

由于计算是根据GMT完成的,所以您必须添加这些21600秒以获得实际差异。

6

strtotime给出了在不同的时区不同的结果,因为它需要的时区考虑......

strtotime's manual

函数需要接受一个包含英语日期格式,并会尝试将字符串将该格式解析为Unix时间戳(自1970年1月1日00:00:00 UTC以来的秒数)

此函数将使用TZ环境变量(如果可用)计算时间戳。自PHP 5.1.0起,有更简单的方法来定义所有日期/时间函数中使用的时区。该过程在date_default_timezone_get()功能页面中进行了解释。

看一看mktime()

自PHP 5.1起,您可以在致电mktimestrtotime之前使用date_default_timezone_set

+0

谢谢,我只是好奇,如果我使用strtotime('2011-09-19 00:00:00')不应该只是返回'1970年1月1日00:00:00'和'2011-09之间的区别-19 00:00:00'?为什么时区在这里是个问题?我可以得到一些只有差别的东西吗? – Usman

+0

为mktime()+1,但它需要参数在几个部分,这是一个痛苦:( – Usman

1

从PHP手册:

该函数将使用TZ环境变量(如果有的话)来计算时间戳。自PHP 5.1.0起,有更简单的方法来定义所有日期/时间函数中使用的时区。该过程在date_default_timezone_get()函数页面中进行了解释。

http://php.net/manual/en/function.strtotime.php

+0

谢谢,我已经更新了一个例子的问题,请看看 – Usman

1

PHP docsstrtotime

该功能将使用TZ环境t变量(如果可用)至 计算时间戳。自PHP 5.1.0起,有更简单的方法可以定义在所有日期/时间函数中使用的时区。在date_default_timezone_get()函数页面中说明了 进程。

尝试setting your own time zone

+0

谢谢,我用一个例子更新了这个问题,请看看。 – Usman

0

我想大概每个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如何使用这个功能;)

+0

这并不能解决问题。 –

相关问题