Php 日期时间比较

Php 日期时间比较,php,datetime,date-comparison,Php,Datetime,Date Comparison,第二个块应该执行,但两个块都不执行。现在我添加了另一个句子,所以stack将允许我进行此编辑 <?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) {

第二个块应该执行,但两个块都不执行。现在我添加了另一个句子,所以stack将允许我进行此编辑

  <?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()
时,您会更改
$previous\u 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";
}

问题是您在这一行的
$previous\u time
上增加了30秒

$thirty_seconds_later = $earlier_time->add(new DateInterval('PT' . 30 . 'S'));
因此,请改为使原始datetime对象不可变,当您执行
->add
时,它不会更改其值,但会在30秒后将新值设置为

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

?>
$previous_time=新日期时间不可变('2018-12-16 11:17:30');
$Three_seconds_later=$Previous_time->add(新日期间隔('PT'.30.S'));
如果($30秒后<$30秒前){
回声“左小于右”;
}否则如果($30秒后>$30秒前){
回声“左大于右”;
}
?>

你好,约翰。看起来我们在这里的想法是一样的:)嗯,对我来说似乎还行。你是不是有什么差错?如有必要,我随时可以把它移到我的办公室。