2

我有以下内容:

$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');
4

3 回答 3

7

$new_date = date('Ymd', strtotime($order_date));

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

$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');
于 2013-04-17T00:29:16.373 回答
2
date('Y-m-d', strtotime($order_date));
于 2013-04-17T00:30:11.150 回答
1

你可以做一个简单的explode()

$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

在线演示

于 2013-04-17T00:44:51.147 回答