PHP:检查DateTime是否未过期

时间:2012-04-17 19:10:41

标签: php datetime compare

我有一个DateTime对象,它保存过去的时间戳。

我现在想检查这个DateTime是否比例如48小时更早。

我怎样才能最好地编写它们?

此致

编辑: 您好,

感谢您的帮助。 继承人帮助方法。 任何命名建议?

    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 个答案:

答案 0 :(得分: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 object,其中有一个成员变量days,可以返回实际的日差。

答案 1 :(得分:3)

你可能想看这里: How do I compare two DateTime objects in PHP 5.2.8?

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

答案 2 :(得分: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)。

答案 3 :(得分:0)

对于那些不想工作几天的人......

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

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

$confirmationRequestedAtInSeconds = $confirmationRequestedAt->getTimestamp();

$expired = $now > $confirmationRequestedAtInSeconds + 48 * 60 * 60;
如果时间已过期,

$expired将为true