2010-04-20 59 views
1
function convertDT($TS) { 
    $TS = strtotime($TS); 
    $TS -= date("Z"); 
    $newTS = date("Y-m-d\TH:i:s\Z", $TS); 
    return $newTS; 
} 

echo "Good: ".convertDT('2010-04-20 01:23:45')."\n"; 
echo "Bad: ".convertDT('2010-31-20 01:23:45')."\n"; 

第二返回日期:1969-12-31T23:00:00ZPHP - 這是爲什麼日期函數不示數出

爲什麼?應該這個錯誤?

回答

3

strtotime()返回false當您給它一個無效的時間戳。 false相當於0如果你在一個整數範圍內使用它,所以當你把它傳遞給這一行:

$newTS = date("Y-m-d\TH:i:s\Z", $TS); 

您有效地創建從0時間戳的日期。根據UNIX時代,0是1970年1月1日,這是您從中獲得最終結果的地方。

你最好的選擇是soemthing這樣的:

$TS = strtotime($TS); 
if($TS === false) { 
    throw new Exception("Invalid timestamp."); 
} 
//etc. 
+0

謝謝,這就是我一直在尋找 – 2010-04-20 19:21:05

0

在您的第二次約會中,您正試圖創建一個月31日和第20天的日期。即使您將這些日期顛倒過來,也沒有任何意義。可能是一個錯字。

+0

是的,我想回到1969年的日期 – 2010-04-20 19:14:00

+0

@Phill,而不是驗證並拋出一個錯誤:'strtotime'的示數,因爲你給了它是一個虛假的日期。您可以檢查錯誤是否返回FALSE。在你的例子的第二行中,你基本上每次都會執行'0 - date('Z')',因爲FALSE被賦值爲0. – ryeguy 2010-04-20 19:18:03

0

閱讀本http://php.net/manual/en/function.strtotime.php

錯誤/異常

每到一個日期/時間函數 調用將產生一個E_NOTICE如果時間 區是無效的,和/或E_STRICT 或使用 系統設置或TZ環境 變量的E_WARNING消息。另請參閱 date_default_timezone_set()

即使輸入字符串無效,此函數也不會生成任何錯誤。