2013-02-22 85 views
2

我有一個格式爲d/m/y的日期字符串,例如22/02/13d/m/y到Y-m-d php stringtotime無法正常工作

我想回顯此字符串爲Y-m-d,但使用下面的代碼,它不起作用。

$d = '22/02/13'; 
echo date('Y-m-d', strtotime($d)); 

輸出:1970-01-01

我在做什麼錯?我是否需要通過/作爲分隔符將其分解並手動執行,還是有更簡單/更優雅的解決方案?

+0

'22/02/13!== 22 -02-13'。第一個是m/d/Y,第二個是dmY,看起來像是在PHP – 2013-05-10 12:26:20

回答

5

使用日期時間:

$datetime = DateTime::createFromFormat('d/m/y', '22/02/13'); 
echo $datetime->format('Y-m-d'); 

See it in action

參考

4

manual

注:

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

爲避免潛在的歧義,儘可能使用ISO 8601(YYYY-MM-DD) 日期或DateTime :: createFromFormat()。

TL;博士:如果您使用斜線它將把它作爲一個M/d/Y瘋狂美式日期。

最簡單的解決方法是使用DateTime class創建自己的格式:

$date= DateTime::createFromFormat('d/m/y', '21/11/13'); 
echo $date->format('Y-m-d'); 
+0

的核心內部進行位置驗證,用於「使用'createFromFormat'」。我不知道人們爲什麼堅持在'createFromFormat'可用時使用'strtotime()'函數我猜人們還在學習前幾年編寫的web教程中的PHP – SDC 2013-02-22 16:40:36

0

DateTime::createFromFormat(...) 

這將創建一個正確的時間值。

4

使用/使得PHP認爲你正在使用的日期(mm/dd/yy)美國式的格式,所以用虛線爲所需的輸出替換它們:

$d = str_replace('/', '-', '22/02/13'); 
echo date('Y-m-d', strtotime($d)); 
0

更簡單的方法:

$d = '22.02.13'; 
echo date('Y-m-d', strtotime($d)); 

Saludos;)

0
echo implode("-", array_reverse(explode('/', $val))); 
+1

你能爲你的代碼添加一些解釋嗎? – 2014-10-30 18:03:57

0

對於這個

「注意: m/d/y或dmy格式的日期通過查看各個組件之間的分隔符來消除歧義:如果分隔符是斜槓(/),那麼美國m/d/y假設;而如果分隔符是破折號( - )或點(。),則假定歐洲的d-m-y格式。 爲了避免潛在的不確定性,這是最好的時候使用ISO 8601(YYYY-MM-DD)日期或日期時間:: createFromFormat()。」

http://php.net/strtotime