我正在尝试获取贷款日期和支付日期之间的日期和持续时间。我使用了 PHP 日期和时间函数,但它并不总是准确的。我怎样才能在 MySQL 中准确地做到这一点?
假设两个日期,贷款日期
2009-05-24
和贷款归还日期
2012-04-30
我写了一个 MySQL 查询
SELECT DATEDIFF('2012-04-30', '2009-05-24') `total_days`;
返回 1072 天,大约是 2 年 11 个月 12 天。
请不要用 PHP 代码回答,我已经尝试过了。这是代码。
下面的函数使用 PHP >= 5.3 函数并将天转换为年、月和日。
function date_interval($date1, $date2)
{
$date1 = new DateTime($date1);
$date2 = new DateTime($date2);
$interval = date_diff($date2, $date1);
return ((($y = $interval->format('%y')) > 0) ? $y . ' Year' . ($y > 1 ? 's' : '') . ', ' : '') . ((($m = $interval->format('%m')) > 0) ? $m . ' Month' . ($m > 1 ? 's' : '') . ', ' : '') . ((($d = $interval->format('%d')) > 0) ? $d . ' Day' . ($d > 1 ? 's' : '') : '');
}
下面的函数使用 PHP >= 5.2 函数并将天转换为年、月和日。
function date_interval($date1, $date2)
{
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365 * 60 * 60 * 24));
$months = floor(($diff - $years * 365 * 60 * 60 * 24) / (30 * 60 * 60 * 24));
$days = floor(($diff - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 * 24) / (60 * 60 * 24));
return (($years > 0) ? $years . ' Year' . ($years > 1 ? 's' : '') . ', ' : '') . (($months > 0) ? $months . ' Month' . ($months > 1 ? 's' : '') . ', ' : '') . (($days > 0) ? $days . ' Day' . ($days > 1 ? 's' : '') : '');
}