2016-05-13 41 views
1

我完全与PHP UTC /本地时间转换混淆。有些函数会隐式转换时间,有些则不会。哎呀!如何从字符串转换为时间戳一对一?

说,我有这样的PHP代码:

$timestamp = strtotime("2016-05-13 09:26:30"); //From MySQL date format 
//$timestamp returned is 1463153190 

然后,如果我convert 1463153190 UTC时间,就变成05/13/2016 @ 3:26pm (UTC)。为什么???

如何获取函数将时间从字符串转换为时间戳一对一,没有任何时区模糊?

+0

除非首先在您的时间字符串中明确指定时区,否则您不可以不使用时区;但考虑使用DateTime对象而不是像strtotime()这样的日期函数,因为它使时区更容易处理 –

回答

3

2016-05-13 09:26:30是一个不完整的时间戳,因为它缺少时区。它可能涉及超过24种不同的“绝对时间点”,具体取决于它所解释的时区。1463153190是绝对时间点的绝对UNIX时间戳。要将以前的时间戳转换为绝对时间点,需要将其解释为一些时区。反过来,转换也需要一些时区来格式化时间点。

在PHP中,转换为UNIX时间戳或从UNIX时间戳转换时,会考虑默认时区。您可以使用date_default_timezone_set进行设置。

因为date_default_timezone在从人类可读格式转换为UNIX时间戳时设置为某个时区(〜+ 6),所以您会看到您看到的内容,但是您将使用UTC明确地将其转换回。您的初始时区根本不是UTC /时间戳最初未被解释为UTC。初始值和最终值之间存在时区不匹配,因此偏移了6个小时。

相关问题