我发现与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));
如果我用'/'代替' - '那么它工作正常。
谁能告诉我为什么会这样?
答案 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);
这允许您自己指定格式。