我有一個格式爲d/m/y
的日期字符串,例如22/02/13
d/m/y到Y-m-d php stringtotime無法正常工作
我想回顯此字符串爲Y-m-d
,但使用下面的代碼,它不起作用。
$d = '22/02/13';
echo date('Y-m-d', strtotime($d));
輸出:1970-01-01
我在做什麼錯?我是否需要通過/
作爲分隔符將其分解並手動執行,還是有更簡單/更優雅的解決方案?
我有一個格式爲d/m/y
的日期字符串,例如22/02/13
d/m/y到Y-m-d php stringtotime無法正常工作
我想回顯此字符串爲Y-m-d
,但使用下面的代碼,它不起作用。
$d = '22/02/13';
echo date('Y-m-d', strtotime($d));
輸出:1970-01-01
我在做什麼錯?我是否需要通過/
作爲分隔符將其分解並手動執行,還是有更簡單/更優雅的解決方案?
使用日期時間:
$datetime = DateTime::createFromFormat('d/m/y', '22/02/13');
echo $datetime->format('Y-m-d');
參考
從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');
的核心內部進行位置驗證,用於「使用'createFromFormat'」。我不知道人們爲什麼堅持在'createFromFormat'可用時使用'strtotime()'函數我猜人們還在學習前幾年編寫的web教程中的PHP – SDC 2013-02-22 16:40:36
看
DateTime::createFromFormat(...)
這將創建一個正確的時間值。
使用/
使得PHP認爲你正在使用的日期(mm/dd/yy
)美國式的格式,所以用虛線爲所需的輸出替換它們:
$d = str_replace('/', '-', '22/02/13');
echo date('Y-m-d', strtotime($d));
更簡單的方法:
$d = '22.02.13';
echo date('Y-m-d', strtotime($d));
Saludos;)
echo implode("-", array_reverse(explode('/', $val)));
你能爲你的代碼添加一些解釋嗎? – 2014-10-30 18:03:57
對於這個
「注意: m/d/y或dmy格式的日期通過查看各個組件之間的分隔符來消除歧義:如果分隔符是斜槓(/),那麼美國m/d/y假設;而如果分隔符是破折號( - )或點(。),則假定歐洲的d-m-y格式。 爲了避免潛在的不確定性,這是最好的時候使用ISO 8601(YYYY-MM-DD)日期或日期時間:: createFromFormat()。」
'22/02/13!== 22 -02-13'。第一個是m/d/Y,第二個是dmY,看起來像是在PHP – 2013-05-10 12:26:20