6

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

编辑:

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

4

6 回答 6

7

简而言之:考虑时区是因为在 GMT 中考虑了 Unix Epoch 值。

从广义上讲2011-09-19 00:00:00,孟加拉国几乎在 6 小时后2011-09-19 00:00:00处于格林威治标准时间区。由于这一差距,21600当同一日期出现在 BD 中时,GMT 区域又过了几秒钟。

由于计算是针对 GMT 完成的,因此您必须添加这些21600秒数才能获得实际差异。

于 2011-09-04T20:13:02.770 回答
6

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

来自strtotime的手册

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

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

看看mktime()

自 PHP 5.1 起,您可以在调用or之前使用date_default_timezone_setmktimestrtotime

于 2011-09-03T18:59:35.690 回答
1

来自 PHP 手册:

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

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

于 2011-09-03T19:00:19.730 回答
1

在调用日期/时间函数之前使用date_default_timezone_set来选择您想要工作的时区。

http://www.php.net/manual/en/function.date-default-timezone-set.php

于 2011-09-03T19:00:36.487 回答
1

来自PHPstrtotime文档:

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

尝试设置您自己的时区

于 2011-09-03T19:00:37.380 回答
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 也不会返回相同的内容,但如果您的服务器位于美国,格林威治标准时间为 -5 小时,但您的浏览器在夏季从柏林调用此功能,格林威治标准时间为 +2 小时...哈哈,现在您可以了解 php 如何使用此功能;)

于 2012-06-29T01:41:34.567 回答