在不考虑年份的情况下,使用PHP计算两个日期之间的差异

3

我通常使用以下方法计算两个日期之间的差值:

$datediff = strtotime($enddate) - strtotime($startdate);        
$totalDays = floor($datediff/(60*60*24));

但是现在我遇到了一个问题。现在我在计算中不应考虑年份。这意味着例如两个日期之间的差异,2014年1月2日和2015年1月6日,应该给出4天的结果。

为此,我将日期格式更改为m-d,并使用以下方法:

$startdate = date('m-d',strtotime($startdate));
$enddate = date('m-d',strtotime($enddate));
$datediff = $enddate - $startdate;
$totalDays = floor($datediff/(60*60*24));

但我得到的结果是0。有人可以帮助我吗?我犯了什么错误?


2
你考虑过闰年吗? - Marek
2
太多糟糕的解决方案 :( 只使用 PHP 日期时间对象,仅传递日期的 m-d 部分,并在那里使用 date_diff 函数。 - Dave
4个回答

4
你可以将年份替换为1970,并对其进行计算。
$date1 = '2014-01-17 04:05:54';
$date2 = '2013-01-12 02:07:54';

$date1 = preg_replace('/([\d]{4})/', '1970', $date1);
$date2 = preg_replace('/([\d]{4})/', '1970', $date2);

$timestamp1 = strtotime($date1);
$timestamp2 = strtotime($date2);

$date_diff = gmdate('d H:i:s', abs($timestamp2-$timestamp1));

var_dump($date_diff);

1
我会使用1972年,这样我们也可以测试闰年 :) - Keith Mifsud

3
请尝试以下步骤:
$startdate = 'January 1 2014';
$enddate =  'February 6 2015';
$startdate = date('d-m-1970',strtotime($startdate));
$enddate = date('d-m-1970',strtotime($enddate));
$datediff = strtotime($enddate) - strtotime($startdate);
$totalDays = floor($datediff/(60*60*24));
echo $totalDays;

希望这可以帮到你。

3

以下是使用PHP DateTime的解决方案:

$date1 = new DateTime('2015-01-02');
$date2 = new DateTime('2014-01-06');

switch (true) {
    case ($date1 < $date2) :
        $date2->setDate($date1->format('Y'), $date2->format('m'), $date2->format('d'));
        break;

    case ($date2 < $date1) :
        $date1->setDate($date2->format('Y'), $date1->format('m'), $date1->format('d'));
        break;
}

$interval = $date1->diff($date2);
echo $interval->format('%R%a days'); // +4 days

玩得愉快!

或者只需剪掉年份并省略开关部分。


1
只需取出日期中的“月-日”部分并在其末尾添加任何年份,例如“-2014”。datediff()函数将会给出所需答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接