比较 PHP 中的两个 dateTime 对象 (Symfony 7)

问题描述 投票:0回答:2

    #[Route('/show/{id}', name: 'app_warning_show', methods: ['GET'])]
    public function show(Warning $warning): Response
    {
        $time = new \DateTime('now');
        $this->checkAccess(['ROLE_WHITELIST','ROLE_FRACTION','ROLE_SUPPORT','ROLE_ADMIN']);
        return $this->render('warning/show.html.twig', [
            'warning' => $warning,
            'expired' => $time > $warning->getEnd(),
        ]);
    }

在数据库中创建日期时间 -> 2024-04-06 12:13:00 持续时间为10小时

    public function getEnd() {
        return date('d.m.Y - H:i:s', ($this->getCreated()->getTimestamp() + ($this->getFrakBanDuration() * 3600)));
    }

尝试1:(

getCreated()
) 2024-04-06 12:13:00 + (
getFrakBanDuration()
) 10小时 = (
getEnd()
) 06.04.2024 - 22:13:00

尝试2:(

getCreated()
) 2024-04-06 12:13:00 + (
getFrakBanDuration()
) 23小时 = (
getEnd()
) 07.04.2024 - 11:13:00

尝试3:(

getCreated()
) 2024-04-06 12:13:00 + (
getFrakBanDuration()
) 100小时 = (
getEnd()
) 10.04.2024 - 16:13:00

$time = new DateTime('now');

$time > $warning->getEnd()
这永远是真的??????

条件

'expired' => $time > $warning->getEnd(),
始终为真。

我比较了时间戳和对象的所有方向和选项,并将持续时间从 10 到 100 进行了比较。因此,新的结束时间是 10.04.2024,旧的结束时间是 06.04.2024。这他妈怎么可能?我不明白。

php symfony datetime
2个回答
0
投票

Verdammt du hast recht。这是一场战争,双方都无法理解。 Macht natürlich sinn das ich keine

strings
miteinander vergleichen kann.

Nachdem ich deine Beispiele gesehen habe,habe ich es verstanden。 Ich muss nicht die Zeiten las Text sondern als

timestamp
vergleichen,也
int
vs.
int
。 Un siehe da es ging.

Weiter schwierig war es,da ich es in TWIG vergleichen musste。 Und danke für das verkürzen des Codes.

洛松:

{% set currDate = date() %}
{% if warning.expireDate and warning.expireDate.timeStamp > currDate.timeStamp %}

所以

1234
>
4321


-1
投票

您的代码可以总结为:

var_dump(new \DateTime() > '2024-04-06 12:13:00');

确实产生了

bool(true)
。这记录在与各种类型的比较

  • 操作数1的类型:对象
  • 操作数 2 的类型:任何内容
  • 结果:物体总是更大

使用文本进行日期计算没有意义,比数字更有意义:

var_dump('one' > 'eleven'); // bool(true)

如果您使用日期对象,请坚持下去。无需转换为文本或 Unix 时间,也无需构建自己的日期计算逻辑:

public function getEnd(): \DateTime
{
    return (clone $this->getCreated())->modify('+' . $this->getFrakBanDuration() . 'hours');
}

(请注意,我克隆到

$this->getCreated()
以避免副作用,这实际上并不是计算的一部分)。

© www.soinside.com 2019 - 2024. All rights reserved.