如何从字符串转换为时间戳一对一转换?

时间:2016-05-13 09:38:55

标签: php time timezone

我对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)。为什么???

我如何获得一个函数将时间从字符串转换为时间戳一对一,而没有任何时区的恶作剧?

1 个答案:

答案 0 :(得分:3)

2016-05-13 09:26:30是一个不完整的时间戳,因为它错过了时区。它可以指超过24个不同的绝对时间点",具体取决于它被解释的时区。1463153190是绝对时间点的绝对UNIX时间戳。要将以前的时间戳转换为绝对时间点,需要将其解释为某些时区。反过来转换也需要一些时区来格式化时间点。

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

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