3

我有一个包含过去时间戳的 DateTime 对象。

我现在想检查这个 DateTime 是否早于例如 48Hours。

我怎样才能最好地合成它们?

问候

编辑:嗨,

谢谢您的帮助。这是辅助方法。有什么命名建议吗?

    protected function checkTemporalValidity(UserInterface $user, $hours)
{
    $confirmationRequestedAt = $user->getConfirmationTokenRequestedAt();
    $confirmationExpiredAt = new \DateTime('-48hours');

    $timeDifference = $confirmationRequestedAt->diff($confirmationExpiredAt);

    if ($timeDifference->hours >  $hours) {
        return false;
    }

    return true;
}
4

4 回答 4

4
$a = new DateTime();
$b = new DateTime('-3days');

$diff = $a->diff($b);

if ($diff->days >= 2) {
  echo 'At least 2 days old';
}

我将 $a 和 $b 用于“测试”目的。DateTime::diff返回一个DateInterval 对象,它有一个返回实际天差的成员变量days

于 2012-04-17T19:16:23.537 回答
3

您可能想看这里: 如何比较 PHP 5.2.8 中的两个 DateTime 对象?

因此,最简单的解决方案可能是创建另一个DateTime日期为 NOW -48Hours 的对象,然后与之进行比较。

于 2012-04-17T19:13:50.650 回答
0

我知道这个答案有点晚了,但也许它可以帮助其他人:

/**
 * Checks if the elapsed time between $startDate and now, is bigger
 * than a given period. This is useful to check an expiry-date.
 * @param DateTime $startDate The moment the time measurement begins.
 * @param DateInterval $validFor The period, the action/token may be used.
 * @return bool Returns true if the action/token expired, otherwise false.
 */
function isExpired(DateTime $startDate, DateInterval $validFor)
{
  $now = new DateTime();

  $expiryDate = clone $startDate;
  $expiryDate->add($validFor);

  return $now > $expiryDate;
}

$startDate = new DateTime('2013-06-16 12:36:34');
$validFor = new DateInterval('P2D'); // valid for 2 days (48h)
$isExpired = isExpired($startDate, $validFor);

这样,您还可以测试除全天以外的其他时间段,并且它也适用于具有较旧 PHP 版本的 Windows 服务器(DateInterval->days始终返回 6015 存在错误)。

于 2013-06-17T21:58:40.393 回答
0

对于不想每天工作的人...

您可以使用DateTime::getTimestamp()方法获取 unix 时间戳。unix 时间戳以秒为单位,易于处理。所以你可以这样做:

$now = new DateTime();
$nowInSeconds = $now->getTimestamp();

$confirmationRequestedAtInSeconds = $confirmationRequestedAt->getTimestamp();

$expired = $now > $confirmationRequestedAtInSeconds + 48 * 60 * 60;

$expired将是true如果时间到期

于 2015-03-27T14:34:42.040 回答