我应如何将数据库中的任何类型的日期格式转换为“ d / m / Y”格式?

时间:2018-09-07 03:35:44

标签: php

是否可以使用PHP将一种日期格式转换为另一种日期格式?

$date=date_create($acalib_date);              //acalib_date provides the date from database

$newdate=date_format($date,"d/m/Y");       //changing the existing date format to d/m/Y

$newDate=date('d/m/Y', strtotime(("$newdate"). " + {$inst_calib_freq_obj->inst_calibration_freq_year} year". " + {$inst_calib_freq_obj->inst_calibration_freq_month} month"));          //here i getting the final date format

注意:在一种情况下,它可以正常运行。

例如:我指定了 3年5个月作为校准期限。所以我将开始日期设置为 12/12/2018 ,返回给我的输出是 12/05/2022

但是在第二种情况下,如果将开始日期设置为 2018/12/13 ,并且返回给我的输出是 07/02/2022 (原始输出返回日期应该是 13/05/2022 ,我在这里错了吗?)

谢谢!

2 个答案:

答案 0 :(得分:1)

格式12/12/2018实际上被解释为美国日期格式month/day/year。这就是为什么当您指定13/12/2018时会得到意外的结果。

如果改用DateTime::createFromFormat方法,并添加DateInterval,则可以实现所需的结果。

编辑-已更新,以支持可变的年份和月份值。

$years = 3;
$months = 5;

$date = DateTime::createFromFormat('d/m/Y', '12/12/2018');
$date->add(new DateInterval("P{$years}Y${months}M"));
echo $date->format('d/m/Y');

$date = DateTime::createFromFormat('d/m/Y', '13/12/2018');
$date->add(new DateInterval("P{$years}Y${months}M"));
echo $date->format('d/m/Y');

阅读DateTimeDateInterval的PHP文档,并查看有效的示例-https://3v4l.org/ioP1V

答案 1 :(得分:0)

您可以这样:

  

请注意,当您使用以下格式创建新的日期对象时   斜杠(eg 02-02-2012 or 02/02/2012)必须在   mm/dd/yy(yy) or mm-dd-yy(yy)格式(而不是英国格式)   dd/mm/yy)!几个月总是在年份之前(美国风格),否则   您会得到一个错误的日期,并且可能会收到类似上面的错误   (PHP在尝试解码13th month时崩溃了。)

<?php


 $acalib_date = '12/13/2018';
 $date = date_create($acalib_date);
 $newdate = date_format($date,'Y/m/d');
 $newDate = date('d/m/Y', strtotime(("$newdate") . " + {$inst_calib_freq_obj->inst_calibration_freq_year} year" . " + {$inst_calib_freq_obj->inst_calibration_freq_month} month"));
 echo $newDate;
?>