日期时间比较 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";
}
问题是你在这一行 $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";
}
?>
第二个块应该执行但都没有执行。现在我要添加另一个句子,以便堆栈让我进行此编辑。
<?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";
}
问题是你在这一行 $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";
}
?>