如何检查时间戳是否超过 12 小时?
我需要使链接工作 12 小时,之后我需要显示错误消息。
$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
}
#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')) { ...
我猜你的意思是一个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 时间戳。
我假设您有一个在下载链接中使用的唯一密钥。只需在语句中包含时间戳子句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();