我有一个格式的日期字符串,d/m/y
例如22/02/13
我想回显这个字符串,Y-m-d
但使用以下代码,它不起作用。
$d = '22/02/13';
echo date('Y-m-d', strtotime($d));
输出:1970-01-01
我究竟做错了什么?我是否必须将/
其分解为分隔符并手动执行,还是有更简单/更优雅的解决方案?
从手册:
笔记:
m/d/y 或 dmy 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 dmy 格式。
为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat()。
tl;dr:如果你使用斜线,它将把它当作 am/d/y 疯狂的美式日期。
最简单的解决方法是使用DateTime 类来创建您自己的格式:
$date= DateTime::createFromFormat('d/m/y', '21/11/13');
echo $date->format('Y-m-d');
Using/
使 PHP 认为您使用的是美式格式的日期 ( mm/dd/yy
),因此将它们替换为破折号以获得所需的输出:
$d = str_replace('/', '-', '22/02/13');
echo date('Y-m-d', strtotime($d));
看着
DateTime::createFromFormat(...)
这将创建一个正确的 DateTime 值。
更简单的方法:
$d = '22.02.13';
echo date('Y-m-d', strtotime($d));
萨卢多斯 ;)
echo implode("-", array_reverse(explode('/', $val)));
为了这
"注意:m/d/y 或 dmy 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),然后假定欧洲 dmy 格式。为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat() 。”