Проблема в понимании разницы даты и времени и инверсии - PullRequest
0 голосов
/ 05 февраля 2019

У меня проблема с пониманием разницы между датой и временем.Я использую класс datetime PHP.

Вот небольшая часть моего кода для вычисления разницы даты и времени:

<code>date_default_timezone_set("Asia/Kolkata");

function timeline_date($date)
{
    $today = new DateTime();
    $timeline_date = new DateTime($date);
    $interval = $today->diff($timeline_date);

    echo "<pre>";
    print_r($today);
    print_r($timeline_date);
    print_r($interval);
    echo "
";} $ date =" 2019-02-02 04:36:02"; echo timeline_date ($ date);

Что означает выражение:

$interval = $today->diff($timeline_date);

Вычитает ли оно значение timeline_date из $ today?

Илиэто вычитает $ сегодня из $ timeline_date?

У меня возникла путаница в связи с этим конкретным утверждением. Я искал в Интернете, но ничего явно не упомянуто.

Также $ timeline_date может быть в прошломили будущая дата и даже сегодняшняя дата. Так имеет ли значение, что мы должны вычесть небольшое количество из большого количества?

Я получаю следующий вывод из кода выше:

DateTime Object
(
    [date] => 2019-02-05 16:11:37
    [timezone_type] => 3
    [timezone] => Asia/Kolkata
)
DateTime Object
(
    [date] => 2019-02-02 04:36:02
    [timezone_type] => 3
    [timezone] => Asia/Kolkata
)
DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 3
    [h] => 11
    [i] => 35
    [s] => 35
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 1
    [days] => 3
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)

Мы можем видеть [invert] => 1в приведенном выше массиве. Что на самом деле означает это? Если я изменю дату $ на:

$date = "2019-02-10 04:36:02";

, то [invert] => 0 изменится на 1. Почему?будет 0, и если у нас будет будущая дата, то этот элемент массива будетбыть 1?

1 Ответ

0 голосов
/ 05 февраля 2019

DateTime::diff дает вам разницу между двумя датами, несколько очевидно.Неважно, какой из них больше или меньше, независимо от этого, дельта - это дельта.Однако полученный DateInterval объект не отмечает, какой из них был больше или меньше со свойством DateInterval::$invert:

Is 1 , если интервал представляет отрицательный период времени и 0 в противном случае.См. DateInterval::format().

Правило таково, что $b в $a->diff($b) предшествует $a, $invert равно 1.Глядя на сказанное DateInterval::format, вы увидите:

R Знак «-» при отрицательном значении, «+» при положительном
r Знак «-» при отрицательном значении, пустой при положительном

Так что, если вы делаете заботитесь о разнице будущего / прошлого, вы можете использовать %R /%r форматирование параметров в DateInterval::format для вывода «-» и / или «+».Если вам все равно, просто пропустите этот параметр, и он не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...