2013-08-21 32 views
1

我正在處理向第三方產品許可服務器發送請求的應用程序,等待響應,然後幾秒鐘後向我的服務器發送請求。稍後,我會根據創建日期和時間比較這兩個記錄。當我看時間時,它們看起來大致相隔6小時(大概是由於時區差異)。但是,當我通過PHP的strtotime()函數運行每個函數時,結果僅相差幾秒鐘。下面是一個例子:PHP-strtotime()如何工作?

echo strtotime("2013-04-29T14:55:47.707Z"); 
echo '<br>'; 
echo strtotime("2013-04-29 08:56:10"); 

顯示爲:

1367247347 
1367247370 

其僅23秒,而不是6小時差異。

如果我沒有提供有關每個日期字符串的時區的任何信息,它們是如何靠近在一起的?

(請記住,我很樂意爲這些結果是正確的,我只是不知道我是怎麼讓他們)

+7

從'的strtotime的數字() '[Unix時間戳](http://en.wikipedia.org/wiki/Unix_time)。第一次字符串在UTC時區(用Z表示「Zulu」)。第二次字符串沒有指定時區,因此使用當前爲PHP配置的內容,它與UTC的偏移量爲-6小時。 – salathe

+0

我唯一能想到的就是'.707Z'必須翻譯成某種類型的時區信息。 – Pitchinnate

+0

您將默認時區設置爲UTC,以便它們在同一時區內進行計算。如果你想要不同的行爲,請參閱[這裏](http://php.net/manual/en/function.date-default-timezone-set.php) – Orangepill

回答

0

你真的應該避免使用strtotime,除非你絕對必須的。當你像你一樣擁有完整的日期格式時,你應該使用內置於PHP的DateTime類。

此代碼應該爲您提供正確的UNIX時間戳。 (您可能不需要包括基於服務器配置默認的時區。如果你這樣做,將其設置爲您的時區。)

// You may be able to comment this out depending on your server configuration 
date_default_timezone_set('America/New_York'); 

$dateone = new DateTime('2013-04-29T14:55:47.707Z'); 
$datetwo = new DateTime('2013-04-29 08:56:10'); 

echo $dateone->format('U'); 
echo "<br/>"; 
echo $datetwo->format('U'); 

輸出:

1367247347 
1367240170