#[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。这他妈怎么可能?我不明白。
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
您的代码可以总结为:
var_dump(new \DateTime() > '2024-04-06 12:13:00');
确实产生了
bool(true)
。这记录在与各种类型的比较:
使用文本进行日期计算没有意义,比数字更有意义:
var_dump('one' > 'eleven'); // bool(true)
如果您使用日期对象,请坚持下去。无需转换为文本或 Unix 时间,也无需构建自己的日期计算逻辑:
public function getEnd(): \DateTime
{
return (clone $this->getCreated())->modify('+' . $this->getFrakBanDuration() . 'hours');
}
(请注意,我克隆到
$this->getCreated()
以避免副作用,这实际上并不是计算的一部分)。