PHP日期函数在某些条件下无法正常工作

时间:2016-04-08 13:29:39

标签: php

我发现与php中的日期函数有关的问题

我想将日期'04 -08-2016'(mm-dd-yyyy)转换为另一种格式'2016-04-08'(yyyy-mm-dd)。但它产生的结果为'2016-08-04'(yyyy-dd-mm)而不是'2016-04-08'(yyyy-mm-dd)。

我的代码是

     $date = '04-08-2016';
     echo date('Y-m-d',strtotime($date));

如果我用'/'代替' - '那么它工作正常。

谁能告诉我为什么会这样?

2 个答案:

答案 0 :(得分:3)

您可以使用DateTime对象:

$date = '04-08-2016';
$d = DateTime::createFromFormat("m-d-Y", $date);
echo $d->format("Y-m-d");

您需要执行此操作的原因是日期约定。 正如http://php.net/manual/en/function.strtotime.php

中所述
  

通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式。但是,如果年份以两位数格式给出,而分隔符是破折号( - ,日期字符串被解析为y-m-d。

答案 1 :(得分:1)

试试这个:

$date = '04-08-2016';
$timeArray = strptime($date, '%m-%d-%Y');
$timestamp = mktime(0, 0, 0, $timeArray['tm_mon']+1, $timeArray['tm_mday'], $timeArray['tm_year']+1900);
echo date('Y-m-d', $timestamp);

这允许您自己指定格式。