PHP日期转换date_create_from_format()未返回预期结果

时间:2018-07-20 00:56:44

标签: php date

我有一个字符串:30/06/18 (30th June 2018)

我要转换为日期:

$calcFieldDate = date_create_from_format('d/m/y', '30/06/18')->format('d-m-Y');
echo $calcFieldDate; 
Result: 18-06-2018

现在我想在日期前增加20天:

$expiryDate = date("d-m-Y", strtotime("+20 days", $calcFieldDate));
echo $expiryDate; 
Expected Result: 08-07-2018
Actual Result: 31-01-1970

我显然正在创建一个日期格式,然后将该日期格式视为字符串...

每次尝试转换时,我都会遇到另一个障碍-是否有一个日期可以像日期一样被处理?

3 个答案:

答案 0 :(得分:2)

$calcFieldDate = date_create_from_format('d/m/y', '30/06/18')->format('d-m-Y');
echo $calcFieldDate;
Result:30-06-2018

$expiryDate = date("d-m-Y", strtotime("+20 days", strtotime($calcFieldDate)));
echo $expiryDate;
Result:20-07-2018

Strtotime()第二个参数是时间戳

答案 1 :(得分:1)

您实际上不需要使用strtotimedate函数来还原,实际上您可以使用DateTime在其中添加日期:

$calcFieldDate = date_create_from_format('d/m/y', '30/06/18');
echo $calcFieldDate->format('d-m-Y'); // get inputted date

$expiryDate = clone $calcFieldDate; // clone the original date object
$expiryDate->modify('+20 days'); // adjust the cloned date
echo $expiryDate->format('d-m-Y'); // show the adjusted date

答案 2 :(得分:0)

这将解决您的问题。

$str="30/06/18 (30th June 2018)";
$arr_temp=explode(" ",$str);
$str_date=str_replace("/","-",$arr_temp[0]);
$dt = DateTime::createFromFormat('d-m-y',$str_date);
$date=$dt->format('d-m-Y');
$new_date=date('d-m-Y',strtotime("+20 days",strtotime($date)));
echo $new_date;