是否可以使用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 ,我在这里错了吗?)
谢谢!
答案 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');
阅读DateTime和DateInterval的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;
?>