11

如何检查时间戳是否超过 12 小时?

我需要使链接工作 12 小时,之后我需要显示错误消息。

4

4 回答 4

33
$dateFromDatabase = strtotime("2012-12-04 12:05:04");
$dateTwelveHoursAgo = strtotime("-12 hours");

if ($dateFromDatabase >= $dateTwelveHoursAgo) {
    // less than 12 hours ago
}
else {
    // more than 12 hours ago
}
于 2013-01-12T23:19:17.830 回答
5

#1。在数据库中进行比较:

如果您有TIMESTAMP字段:

timestampField < (CURRENT_TIMESTAMP() - 3600*12)

如果您有DATETIME字段:

datetimeField < DATE_SUB(NOW(), INTERVAL 12 HOUR)

#2。在 PHP 中进行比较:

$c = new DateTime;
$d = new DateTime('you timestamp or datetime');
if ($c < $d->modify('-12 hour')) { ...
于 2013-01-13T00:16:00.507 回答
1

我猜你的意思是一个unix时间戳。如果是这样,您可以应用简单的数学:

// a unix-timestamp is the time since 1970 in seconds
// 60 seconds = 1 minute, 60 minutes = 1 hour, 12 hours
// so this calculates the current timestamp - 12 hours and checks
// if 12 hours ago the timestamp from your database lay in the future
if ( $timestamp > (time() - 60*60*12) ) {
    // show your link
} else {
    // 12 hours are up
    // give your error message
}

如果您的数据库返回格式化的日期(例如带有时间戳/日期字段类型的 mysql),您必须首先使用strtotime()获取 unix 时间戳。

于 2013-01-12T23:45:18.137 回答
1

我假设您有一个在下载链接中使用的唯一密钥。只需在语句中包含时间戳子句WHERE

<?php

$timestamp = date('Y-m-d H:i:s', strtotime('-12 hours'));

$sql = "SELECT * FROM `links` WHERE `key` = :key AND `created` > :timestamp";
$stmt = $db->prepare($sql);
$stmt->bindParam(':key', $key, PDO::PARAM_STR);
$stmt->bindParam(':timestamp', $timestamp, PDO::PARAM_STR);
$stmt->execute();
$row = $stmt->fetchObject();
于 2013-01-12T23:49:11.457 回答