最佳转换方式'04-17-2013'& # 39; 2013 - 04 - 17 & # 39;在PHP


Best way to convert '04-17-2013' to '2013-04-17' in PHP?

我有以下内容:

$order_date = '04-17-2013';
echo $order_date . "'n";
$order_date = date_create($order_date);
$order_date = date_format($order_date, 'Y-m-d');
echo $order_date;

输出为:

before = 04-17-2013
after  = 

我以为我有工作,但一定是错了,因为它现在不工作!

更新使用的解决方案

$date = DateTime::createFromFormat('m-d-Y', $order_date);
$new_date = $date->format('Y-m-d');

<年代> $ new_date =日期(Y-m-d, strtotime (order_date美元));

这行不通。m/d/yd-m-y格式中的日期可以通过查看各个组成部分之间的分隔符来消除歧义:如果分隔符是斜杠(/),则假定为美式m/d/y;而如果分隔符是破折号(-)或点(.),则采用欧洲的d-m-y格式。(源)

$new_date = date_create_from_format('m-d-Y', $order_date);

$date = DateTime::createFromFormat('m-d-Y', $order_date);
$new_date = $date->format('Y-m-d');

实际操作

或PHP 5.5+

$new_date = (DateTime::createFromFormat('m-d-Y', $order_date))->format('Y-m-d');
date('Y-m-d', strtotime($order_date));

你可以做一个简单的explosion ():

$order_date = '04-17-2013';
list($m, $d, $y) = explode('-', $order_date);
$order_date = $y.'-'.$m.'-'.$d;
echo $order_date; // 2013-04-17

在线演示。


一行字?

$order_date = '04-17-2013';
$order_date = preg_replace('/('d{2})-('d{2})-('d{4})/', '$3-$1-$2', $order_date);
echo $order_date; // 2013-04-17

在线演示。