找出2个日期之间的差异

时间:2010-11-14 06:35:21

标签: php

我做了这个,需要一些帮助调整它,以便它给出正确的结果

function daysDifference($end){
    //$start = "2007-03-24";
    //$end = "2009-06-26";
    $now = date("Y-m-d");
    $e = (is_string($end) ? strtotime($end) : $end);

    $diff = abs($e - strtotime($now));

    $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 == 1 ? $years . ' year ' : $years . ' years ')) . ($months == 0 ? '' : ($months == 1 ? $months . ' month ' : $months . ' months ')) . ($days == 0 ? '' : ($days == 1 ? $days . ' day ' : $days . ' days '));
}

$end正从我的数据库中提取,因此检查是否已经是字符串或日期。

现在可以使用

$e,但当我尝试从$now中减去$e时,我得到了有趣的结果

例如:

$now今天13th$e是项目的结束日期,它假设给我我需要的东西......对吗?

如果我想在12天内说出来,我会得到1年12天。

以及$e = 0000-00-00(如果用户没有输入结束日期),我可以获得40年10个月和26天的剩余时间。

我在计算中尝试了很多不同的变化,但我一直无处可去。

2 个答案:

答案 0 :(得分:4)

你为什么要重新发明轮子?使用date_diff

<?php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%d days');
?>

答案 1 :(得分:2)

存储实际日期,而不是字符串,您只需向数据库询问差异。

SELECT DATEDIFF(CURRENT_DATE, end) FROM table

如果您只是将事物除以365,则无法获得准确的结果。并非每年都有365天。