Сравнение DateTime PHP - PullRequest
       10

Сравнение DateTime PHP

0 голосов
/ 16 декабря 2018

Второй блок должен выполняться, но ни один не должен.Теперь я добавляю другое предложение, чтобы стек позволил мне сделать это редактирование.

  <?php

  $earlier_time = new DateTime('2018-12-16 11:17:30');
  $thirty_seconds_later = $earlier_time->add(new DateInterval('PT' . 30 . 'S'));

  if ($thirty_seconds_later < $earlier_time) {
    echo "left is less than right";
  } else if ($thirty_seconds_later > $earlier_time) {
    echo "left is greater than right";
  }

  ?>

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Проблема в том, что вы добавили 30 секунд к $earlier_time в этой строке

$thirty_seconds_later = $earlier_time->add(new DateInterval('PT' . 30 . 'S'));

Поэтому вместо этого сделайте ваш исходный объект datetime неизменным, и он не изменит свое значение, когда вы выполните ->addно установит новое значение в thirty_seconds_later

$earlier_time = new DateTimeImmutable('2018-12-16 11:17:30');

$thirty_seconds_later = $earlier_time->add(new DateInterval('PT' . 30 . 'S'));


if ($thirty_seconds_later < $earlier_time) {
    echo "left is less than right";
} else if ($thirty_seconds_later > $earlier_time) {
    echo "left is greater than right";
}

?>
0 голосов
/ 16 декабря 2018

Это потому, что когда вы используете DateTime(), это не является неизменным, поэтому, когда вы вызываете DateTime::add(), вы изменяете объект $earlier_time, и ваше сравнение всегда будет равным (вы сравниваете один и тот же объект).Для решения этой проблемы используйте DateTimeImmutable().

<?php
$earlier_time = new DateTimeImmutable('2018-12-16 11:17:30');

$thirty_seconds_later = $earlier_time->add(new DateInterval('PT' . 30 . 'S'));

if ($thirty_seconds_later < $earlier_time) {
    echo "left is less than right";
} else if ($thirty_seconds_later > $earlier_time) {
    echo "left is greater than right";
}

Демо

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