将日期格式从d / m / Y更改为Y-m-d

时间:2014-11-16 09:34:50

标签: php date datetime

您好,我的日期格式为d / m / Y,我想将其更改为Y-m-d。 我使用这段代码:

$check_in  = '31/12/2014';
$check_out = '2/01/2015';

$md = explode("/", $check_in); // split the array
$nd = $md[2]."-".$md[1]."-".$md[0]; // join them together
$check_in_new = date('Y-m-d', strtotime($nd));

$mmd = explode("/", $check_out); // split the array
$nnd = $md[2]."-".$mmd[1]."-".$mmd[0]; // join them together
$check_out_new = date('Y-m-d', strtotime($nnd));

并且工作正常,但如果我尝试转换02/01 / 2015 (2015年),结果为 2014 -01-02 它将年份转换为 2014

任何帮助???

2 个答案:

答案 0 :(得分:2)

我建议在这种情况下使用DateTime类,并在其中使用createFromFormat提供正确的格式,而不是爆炸这些字符串:

$check_in  = '31/12/2014';
$check_out = '2/01/2015';

$check_in_new = DateTime::createFromFormat('d/m/Y', $check_in);
$check_out_new = DateTime::createFromFormat('d/m/Y', $check_out);

echo $check_in_new->format('Y-m-d') . '<br/>';
echo $check_out_new->format('Y-m-d') . '<br/>';

参考:http://php.net/manual/en/class.datetime.php

答案 1 :(得分:0)

如果您想继续现在的方式,可以通过以下方式轻松完成:

$check_in  = '31/12/2014';
$check_out = '2/01/2015';
$check_in_new = implode('-',array_reverse(explode('/',$check_in)));
$check_out_new = implode('-',array_reverse(explode('/',$check_out)));

但有一种更好的方法:

//Set format
$format = 'Y-m-d';
$dto = new DateTime(strtotime($check_in));
$check_in_new = $dto->format($format);