我可以使用以下代码获得两个日期(DD / MM / YY格式)之间的差异;
$date1 = new DateTime("1986-04-27");
$today = new DateTime("now");
$interval = $date1->diff($today);
$year = $interval->format('%y');
$month = $interval->format('%m');
$day = $interval->format('%d');
计算1年2个月时效果很好但是当我试图计算1年2个月3天时,它并没有给我准确的结果。
我想了解两个日期之间的差异,一年使用360天,一个月使用30天,而不计算闰年。
例如;如果一个月有31天,系统会将其计算为30天。 如果一年有365天,系统将计算为1年5天。 (360 + 5)
我该怎么做?
谢谢..
答案 0 :(得分:2)
以下是这样做的方法:
function diff360($date1, $date2) {
$date1 = new DateTime($date1);
$date2 = new DateTime($date2);
$diff = $date1->diff($date2);
$days = ($date2->format('d') + 30 - $date1->format('d')) % 30;
return array(
"y" => $diff->y,
"m" => $diff->m,
"d" => $days,
"totaldays" => $diff->y * 360 + $diff->m * 30 + $days
);
}
$result = diff360("2016-02-06", "2016-03-06");
var_export($result);
输出:
array (
'y' => 0,
'm' => 1,
'd' => 0,
'totaldays' => 30,
)
答案 1 :(得分:1)
只需获取天数并减去年/月。
$totalDays = $interval->format('%a');
$years = 0;
$months = 0;
while ($totaldays >= 360) { $years++; $totaldays -=360; }
while ($totaldays >= 30) { $months++; $totaldays -=30; }
$days = $totalDays
但为什么你需要一个破碎的日期格式?
答案 2 :(得分:0)
DateTime类将根据实际日期计算差异。在你的例子中,它是否会起作用是随机的。如果你想使用几个月的自定义长度,忽略闰年等,那么你必须自己创建自定义函数。
我真的不明白这样做的意义吗?