PHP дает фатальную ошибку при сравнении дат - PullRequest
0 голосов
/ 06 мая 2019

У меня есть одна дата в базе данных, и я хочу сравнить ее с текущей датой. Поэтому я пишу следующую функцию:

$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);

So

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

Но я не могу напечатать значение $comparison.

Неустранимая ошибка PHP: необработанная ошибка: вызов функции diff () для строки

Как я могу решить это?

Ответы [ 4 ]

2 голосов
/ 06 мая 2019

Вы передаете $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 голос
/ 06 мая 2019

Вы играли дату 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;

Вот официальный документ .

Вы проверяете этот массив, поскольку нет разницы между годом и месяцем, так как обе даты принадлежат одному и тому же месяцу и году, поэтому его приход 0.0

0 голосов
/ 06 мая 2019

Выдает ошибку, потому что вы вызываете format для date2, которая возвращает строку, а не объект DateTime.

Уберите вызов для форматирования, тогда ваше сравнение должно сработать.

Все, что вам нужно сделать, это заменить последнюю строку следующим текстом:

$comparison=do_diifernce($databse_date, $today);
0 голосов
/ 06 мая 2019

Вы получили ошибку здесь: $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);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...