2

我有一个格式的日期字符串,d/m/y例如22/02/13

我想回显这个字符串,Y-m-d但使用以下代码,它不起作用。

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

输出:1970-01-01

我究竟做错了什么?我是否必须将/其分解为分隔符并手动执行,还是有更简单/更优雅的解决方案?

4

7 回答 7

5

使用日期时间:

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

看到它在行动

参考

于 2013-02-22T16:34:12.010 回答
4

手册

笔记:

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');
于 2013-02-22T16:34:36.123 回答
4

Using/使 PHP 认为您使用的是美式格式的日期 ( mm/dd/yy),因此将它们替换为破折号以获得所需的输出:

$d = str_replace('/', '-', '22/02/13');
echo date('Y-m-d', strtotime($d));
于 2013-02-22T16:35:50.953 回答
0

看着

DateTime::createFromFormat(...)

这将创建一个正确的 DateTime 值。

于 2013-02-22T16:35:32.953 回答
0

更简单的方法:

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

萨卢多斯 ;)

于 2013-02-22T16:39:17.320 回答
0
echo implode("-", array_reverse(explode('/', $val)));
于 2014-10-30T17:41:03.507 回答
0

为了这

"注意:m/d/y 或 dmy 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),然后假定欧洲 dmy 格式。为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat() 。”

http://php.net/strtotime

于 2015-03-07T19:30:06.123 回答