我对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 :(得分: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小时。