首页 > 解决方案 > 日期时间比较 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";
  }

  ?>

标签: phpdatetimedate-comparison

解决方案


这是因为当您使用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";
}

演示


推荐阅读