PHP在比较日期时给出致命错误

时间:2019-05-06 06:58:15

标签: php date datetime

我在数据库中有一个日期,我想将其与当前日期进行比较。所以我写了下面的函数:

$today = new DateTime();
$today_date = $current_date->format('Y-m-d H:i:s');

function do_diifernce($date_1, $date_2) {
    $my_date = $date_1;
    $createDate = new DateTime($my_date);
    $strip = $createDate->format('Y-m-d');
    $difference = $date_2->diff($createDate, true);
    $difference->total_difference = $difference->y . "." . $difference->m;
    return $difference;
}

$comparison = do_diifernce($databse_date, $today_date);

所以

$databse_date = 2019-06-01 00:00:00.000000
$today_date = 2019-05-06 10:48:01

但是我无法打印$comparison的值。

  

PHP致命错误:未捕获错误:在字符串上调用成员函数diff()

我该如何解决?

4 个答案:

答案 0 :(得分:2)

您将$today_date传递给do_diifernce(),它是一个字符串(因为您已经用format()对其进行了格式化)。您可以传入$today(是一个对象),也可以包含一个条件来检查其是否是一个对象。

function do_difference($date_1, $date_2) {
    // Check if the arguments were DateTime objects - if not, instantiate them as that
    if (!($date_1 instanceof DateTime)) {
        $date_1 = new DateTime($date_1);
    } 
    if (!($date_2 instanceof DateTime)) {
        $date_2 = new DateTime($date_2);
    } 

    // Compare the difference and return the Y and m properties
    $difference = $date_2->diff($date_1);
    $difference->total = $difference->y . "." . $difference->m;
    return $difference;
}

$today = new DateTime();
$comparison = do_difference($databse_date, $today);

答案 1 :(得分:1)

您将日期2作为字符串播放,应将其当作datetime对象,以获取两个datetime对象之间的差异。

function do_diifernce($date_1, $date_2)
{

    $createDate1                  = new DateTime($date_1);
    $createDate2                  = new DateTime($date_2);
    $difference                   = $createDate2->diff($createDate1);
    $sign = ($createDate1 < $createDate2 ? '-':'+');
    $difference->total_difference = $difference->format("%r%a");
    return $difference;
}
$databse_date = "2019-05-01 00:00:00";
$today_date   = "2019-05-06 10:48:01";
$comparison   = do_diifernce($databse_date, $today_date);
print_r($comparison);die;

这里是官方doc

您检查该数组,因为年份和月份没有差异,因为两个日期都属于同一月份和年份,所以它即将到来0.0

答案 2 :(得分:0)

您在这里遇到错误:$difference = $date_2->diff($createDate, true);。 AFAIK,diff()函数在PHP 5.3之后不推荐使用。

如果要计算两个日期之间的时差,可以使用date_diff,如下所示。

<?php
    $date1 = date_create("2000-04-01");
    $date2 = date_create("2019-04-06");
    $diff = date_diff($date1, $date2);
?>

答案 3 :(得分:0)

抛出错误,因为您在date2上调用format,它返回一个字符串,没有DateTime对象。

删除对format的调用,则您的比较应该可以进行。

您要做的就是用以下内容替换最后一行:

$comparison=do_diifernce($databse_date, $today);