我有两个表格日期:

Start Date: 2007-03-24 
End Date: 2009-06-26

现在我需要通过以下形式找到这两者之间的区别:

2 years, 3 months and 2 days

如何在PHP中执行此操作?


当前回答

我在下面的页面上找到了您的文章,其中包含了许多PHP日期时间计算的参考。

使用PHP计算两个日期(和时间)之间的差异。下一页提供了一系列不同的方法(共7种),用于使用PHP执行日期/时间计算,以确定两个日期之间的时间差(小时、弹药)、天、月或年。

请参阅PHP日期时间–计算两个日期之间差值的7种方法。

其他回答

我更喜欢使用date_create和date_diff对象。

代码:

$date1 = date_create("2007-03-24");
$date2 = date_create("2009-06-26");

$dateDifference = date_diff($date1, $date2)->format('%y years, %m months and %d days');

echo $dateDifference;

输出:

2 years, 3 months and 2 days

有关更多信息,请阅读PHP date_diff手册

根据手册date_diff是的别名日期时间::diff()

使用此函数

//function Diff between Dates
//////////////////////////////////////////////////////////////////////
//PARA: Date Should In YYYY-MM-DD Format
//RESULT FORMAT:
// '%y Year %m Month %d Day %h Hours %i Minute %s Seconds' =>  1 Year 3 Month 14 Day 11 Hours 49 Minute 36 Seconds
// '%y Year %m Month %d Day'                       =>  1 Year 3 Month 14 Days
// '%m Month %d Day'                                     =>  3 Month 14 Day
// '%d Day %h Hours'                                   =>  14 Day 11 Hours
// '%d Day'                                                 =>  14 Days
// '%h Hours %i Minute %s Seconds'         =>  11 Hours 49 Minute 36 Seconds
// '%i Minute %s Seconds'                           =>  49 Minute 36 Seconds
// '%h Hours                                          =>  11 Hours
// '%a Days                                                =>  468 Days
//////////////////////////////////////////////////////////////////////
function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' )
{
    $datetime1 = date_create($date_1);
    $datetime2 = date_create($date_2);

    $interval = date_diff($datetime1, $datetime2);

    return $interval->format($differenceFormat);

}

仅根据需要设置参数$differenceFormat例如,我希望你的年龄在到岁之间,以月和日为单位

dateDifference(日期('Y-m-d'),$date,'%Y%m%d')

或其他格式

dateDifference(日期('Y-m-d'),$date,'%Y-%m-%d')

您可以使用

getdate()

函数,该函数返回包含所提供日期/时间的所有元素的数组:

$diff = abs($endDate - $startDate);
$my_t=getdate($diff);
print("$my_t[year] years, $my_t[month] months and $my_t[mday] days");

如果开始和结束日期为字符串格式,则使用

$startDate = strtotime($startDateStr);
$endDate = strtotime($endDateStr);

在上述代码之前

您还可以使用以下代码通过向上舍入分数来返回日期差异$date1=$duedate;//指定到期日echo$date2=日期(“Y-m-d”);//当前日期$ts1=字符串时间($date1);$ts2=字符串时间($date2);$seconds_diff=$ts1-$ts2;echo$datediff=ceil(($seconds_diff/3600)/24);//天内返回

如果您使用php的floor方法而不是ceil,它将返回舍入分数。请检查此处的差异,有时,如果您的临时服务器时区与现场站点时区不同,在这种情况下,您可能会得到不同的结果,因此请相应地更改条件。

当PHP 5.3(分别为date_diff())不可用时,我使用了我编写的以下函数:

        function dateDifference($startDate, $endDate)
        {
            $startDate = strtotime($startDate);
            $endDate = strtotime($endDate);
            if ($startDate === false || $startDate < 0 || $endDate === false || $endDate < 0 || $startDate > $endDate)
                return false;

            $years = date('Y', $endDate) - date('Y', $startDate);

            $endMonth = date('m', $endDate);
            $startMonth = date('m', $startDate);

            // Calculate months
            $months = $endMonth - $startMonth;
            if ($months <= 0)  {
                $months += 12;
                $years--;
            }
            if ($years < 0)
                return false;

            // Calculate the days
            $measure = ($months == 1) ? 'month' : 'months';
            $days = $endDate - strtotime('+' . $months . ' ' . $measure, $startDate);
            $days = date('z', $days);   

            return array($years, $months, $days);
        }