2011-07-23 44 views
-1

我使用PHP的功能的strtotime從一種格式轉換日期到另一個 我有以下PHP的strtotime功能

$date = "12-22-2011"; 

echo $newDateFormat = date("Y-m-d", strtotime($date)); 

// Output 1970-01-01 
// But when i replace "-" with "/" I get proper output 
$date = "12/22/2011"; 

echo $newDateFormat = date("Y-m-d", strtotime($date)); 

// Output 2011-12-22 

爲什麼會這樣? 還是有任何其他函數接受任何東西,並轉換爲適當的日期格式?

+0

我在http://writecodeonline.com/php/嘗試了你的例子,並得到了第一個回聲的'2019-04-03'。 –

回答

4

strtotime文檔:

日期在M/d/y或DMY格式通過查看在各個組件之間的分離器消除歧義:如果分離器是斜線(/),則假設美國的m/d/y;而如果分隔符是破折號( - )或點(。),則假定歐洲的d-m-y格式。

基本上,連字符的日期被假定爲d-m-y,並且從來沒有m-d-y。

對於自定義分析,請使用DateTime::createFromFormat()

2

使用的格式,如dd-mm-yyyymm-dd-yyyy是不太安全的:strtotime()無法確切知道哪些你所使用的之一(想想06-11-2011,例如:這是在六月,或在十一月?)

使用strtotime(),您通常最好使用yyyy-mm-dd格式。


如果您想以特定的已知格式解析日期,則應該使用DateTime::createFromFormat() - 注意它僅適用於PHP> = 5.3。