日期时间比较 PHP

DateTime comparison PHP

第二个块应该执行但都没有执行。现在我要添加另一个句子,以便堆栈让我进行此编辑。

  <?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";
}

Demo

问题是你在这一行 $earlier_time 中添加了 30 秒

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

因此,让您的原始日期时间对象不可变,当您执行 ->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";
}

?>