时间戳:检查是否已有30分钟

时间:2013-09-09 03:56:14

标签: php mysql timestamp

我已设置此代码,但它似乎无法正常工作。基本上我在数据库中放了一个时间戳,每当有人试图提交一些东西时,我会检查他们的IP,然后他们最后一次提交时间戳基本上我需要确保它在发布前30分钟已经超过了。这是我迄今为止的代码......

$ip = $_SERVER["REMOTE_ADDR"];
$chkquery = "SELECT * FROM faucet where ip='$ip' ORDER BY timestamp DESC LIMIT 1;";
$chk = mysql_query($chkquery) or die($chkquery."<br/><br/>".mysql_error());
while($row = mysql_fetch_array($chk, MYSQL_ASSOC)){
    $timestamp = $row['timestamp'];
}
$timenow = time();
$chktime = strtotime($timestamp);
if($chktime <= ($timenow - 1800)) {
    echo "Yay! It has been 30 minutes!";
} else {
    echo "Wait! Its not been 30 minutes";
}

我需要更改/修复才能使其正常工作吗?非常感谢您的帮助! if语句可能会被颠倒,但是IDK,我最终还是Yay!无论什么时候......

2 个答案:

答案 0 :(得分:2)

依赖于strtotime()是不安全的,因为它是由系统的时区设置定义的。 您应该调整date.timezone setting或使用date_default_timezone_set() 例如:

date_default_timezone_set('America/New_York');
...

if($timenow - $chktime >= 1800) {
    echo "Yay! It has been 30 minutes!";
} else {
    echo "Wait! Its not been 30 minutes";
}

编辑:添加剩余时间

$time_diff = $timenow - $chktime;
if( $time_diff >= 1800) {
    echo "Yay! It has been 30 minutes!";

} else {
    $remaining = (1800 - $time_diff );
    echo "Wait! Its not been 30 minutes\n";
    echo "please come back in ".date ( "i:s" , $remaining)." minutes";
}

答案 1 :(得分:0)

请检查您的数据库时区和php时区设置。

你在数据库和php上的时区可能不同。

在php脚本上,您可以使用date_default_timezone_set()设置时区,date_default_timezone_get()来检查设置的时区

在mysql上,查看my.inimy.cnf了解设置