为什么strtotime在不同的时区给出不同的结果?

Muh*_*man 4 php strtotime date-conversion unix-timestamp

我不知道为什么strtotime()在PHP中返回不同时区的不同结果,即使相同的日期作为参数给出,有谁知道答案?我也想知道,我可以用另一个在不同时区给出相同结果的函数datetime来完成类似的任务(将a转换成一个int容易进行的计算)吗?

编辑:

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

mas*_*nun 7

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

从更广泛的意义上来说2011-09-19 00:00:00,几乎在6小时之后,它就2011-09-19 00:00:00在格林威治标准时间区域.由于存在这种差距,21600当BD中出现相同日期时,GMT区域又过了几秒钟.

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


Gre*_*osz 6

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

strtotime手册:

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

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

看看mktime().

由于PHP 5.1,你可以使用date_default_timezone_set之前调用mktimestrtotime.