Второй блок должен выполняться, но ни один не должен. Теперь я добавляю другое предложение, чтобы стек позволил мне сделать это редактирование.
<?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";
}
?>
Это потому, что когда вы используете 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";
}
Проблема в том, что вы добавили 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";
}
?>