0

当我想转换一个日期以便我可以将它“提供”给 MySQL (mm/dd/yyyy -> yyyy-mm-dd) 这个 preg_match 工作正常

$new_date = preg_replace("!([01][0-9])/([0-9]{2})/([0-9]{4})!", "$3-$1-$2", $data[$c]);

日期如

04/02/2012, 12/31/2012

但是当我得到像这样的输入时它失败了

12/1/2011, 1/4/2011

如何解决它,因为我完全不熟悉正则表达式... :(

非常感谢你的帮助。

4

4 回答 4

1

尝试:

!([01]?[0-9])/([0-9]{1,2})/([0-9]{4})!

第二{1,2}组上的 表示 0-9 之间的 1 位或 2 位数字。我还让第一部分接受 1 或 2 位数字,以便您可以匹配 2012 年 3 月 12 日和 2012 年 3 月 12 日。

于 2012-11-16T00:28:01.813 回答
1

尝试:

!(\d{1,2})/(\d{1,2})/(\d{4})!

\d表示一个数字,我认为它比 更方便[0-9],它们几乎是等价的。

于 2012-11-16T00:29:53.837 回答
0

使用日期然后使用正则表达式更容易。DateTime对象使这很容易:

$date = new DateTime('1/1/2013');
$new_date = $date->format('Y-m-d'); // Outputs 2013-01-01
于 2012-11-16T00:28:24.920 回答
0

尝试:

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

strtotime几乎适用于任何格式。

于 2012-11-16T00:34:47.673 回答