将天数转换为剩余年份和天数

时间:2014-07-30 13:47:18

标签: php

我正在尝试将天数转换为年数和剩余天数格式。这就是我试过的:

<?php
$reg_date = date('Y-m-d', strtotime($whois_details[5])); // 1997-09-15
$total_days = (date('Y-m-d') - $reg_date) * 365; // 2014-07-30
$total_years = intval($total_days / 365);
$remaining_days = ($total_days % 365) % 30;
if ($total_days < 365) {
    $remaining_days = $total_days;
}
echo $total_years.' years and '.$remaining_days.' days';
?>

OUTPUT - for 300

0 years and 300 days - THIS IS OK

OUTPUT - for 500

1 years and 15 days - THIS IS NOT OK

http://codepad.org/MDQjsz5l

应该 - 为500

1 years and 135 days

我错了什么。我检查了C尖锐的问题并尝试转换它。

2 个答案:

答案 0 :(得分:6)

我不知道你复制的代码为什么会这样做,你可以链接吗?

这当然忽略了日期的复杂性(如闰年),但作为该算法通常如何工作的一个例子。考虑到闰年,您需要知道所涉及的时间跨度是否包括任何时间。如果你给的只是几天,这就是你能做的最好的事情。

$days = 500;
$years_remaining = intval($days / 365); //divide by 365 and throw away the remainder
$days_remaining = $days % 365;          //divide by 365 and *return* the remainder

答案 1 :(得分:3)

如果你想考虑闰年,你应该考虑在PHP中使用日期函数。

$date1 = new DateTime('2014-07-30');
$date2 = new DateTime('1997-09-15');

$interval = $date2->diff($date1);
echo $interval->format('%Y years, %m months, %d days');

或您的问题

$years = $interval->format('%Y');// total years
$days = $interval->format('%a') - (int)$years*365;// total days - total years * days per year

但我相信以上2行可以用更多日期函数的方式完成。