2016-05-13 34 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個小時。

相關問題