如何检查日期是否不一样

时间:2015-03-18 16:35:58

标签: php date

我尝试编写一个脚本,可以计算两个日期之间的差异,以天为单位,diff不符合我的需要。

更具体地说,我们假设我们有以下两个日期/时间:

2015-03-18 23:00

2015-03-19 02:00

实际时差是四个小时,在这个术语中diff工作正常!

但我想知道的是,如果日历日期已经改变,那么实际差异是什么。

因此,在上面的例子中,日历日期有1天的差异。

在以下示例中

2015-03-18 23:00

2015-03-21 02:00

我有三天的差异。那么我该如何计算这个日期差异呢?

目前我使用以下代码:

$datetime1 = new DateTime('2009-10-11 23:30');
$datetime2 = new DateTime('2009-10-12 02:30');

$interval = $datetime1->diff($datetime2);

echo "<pre>";
print_r($interval);
echo "</pre>";

,结果如下:

DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 3
    [i] => 0
    [s] => 0
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 0
    [days] => 0
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)

有什么想法吗?谢谢......

4 个答案:

答案 0 :(得分:1)

你肯定可以使用这样的函数:

$time1 = strtotime("2008-12-13 10:42:00");
$time2 = strtotime("2010-10-20 08:10:00");

$diff = $time2-$time1;
// the difference in int. then you can divide by 60,60,24 and 
// so on to get the h:m:s out of it

或者如果你更多地参与php函数的构建,那么这样的东西可能适合你的需求:

$date_a = new DateTime('2010-10-20 08:10:00');
$date_b = new DateTime('2008-12-13 10:42:00');

$interval = date_diff($date_a,$date_b);

echo $interval->format('%h:%i:%s');
最好的问候。

答案 1 :(得分:1)

一个非常简单的解决方案

注意:仅当天数在同一个月时才会有效。

$datetime1 = new DateTime('2015-03-18 23:00');
$datetime2 = new DateTime('2015-03-21 02:00');
$difference = $datetime2->format('d') - $datetime1->format('d'); //3

清洁解决方案

您可以删除日期中的所有内容,但可以删除年,月和日,并使用diff()。

$datetime1 = new DateTime('2015-03-18 23:00');
$datetime2 = new DateTime('2015-03-21 02:00');
$datetime1modified = new DateTime($datetime1->format('Y-m-d'));
$datetime2modified = new DateTime($datetime2->format('Y-m-d'));
$difference = $datetime1modified->diff($datetime2modified)->d; //3

答案 2 :(得分:1)

您可以做的是从每个日期中删除时间,然后计算。

示例:

$datetime1 ='2009-10-11 23:30';
$datetime2 = '2009-10-12 02:30';

$date1_explode = explode($datetime1,' ');
$date1_explode = explode($datetime1,' ');

$date = $date1_explode[1];
$date = $date2_explode[1];
$date1 = new DateTime($datetime1);
$date2 = new DateTime($datetime1);

$interval = $date1->diff($date2);

echo "<pre>";
print_r($interval);
echo "</pre>";

答案 3 :(得分:1)

如果您不关心工作时间,并且只想知道更改日期,您可以尝试diff将这些日期设置为同一小时之后的日期:

$datetime1 = new DateTime('2009-10-11 23:30');
$datetime2 = new DateTime('2009-10-12 02:30');

// Work on duplicates to not change the original objects if they are needed later
$date1 = clone $datetime1;
$date2 = clone $datetime2;

// Set the same hour on both $date1 and $date2
$date1->setTime(0, 0, 0);
$date2->setTime(0, 0, 0);

// Now you can simply compare $date1 to $date2 to see if they are equal
if ($date1 == $date2) {
    echo('$datetime1 and $datetime2 are on the same date.');
} else {
    echo('$datetime1 and $datetime2 are on different dates.');
}

// Or you can compute the difference
$diff = $date2->diff($date1);
// and format it as you like
echo('There are '.$diff->format('%d').' days between '.$date1.' and '.$date2);