1

我有一个投票脚本,允许人们每 24 小时为数据库中的一个项目投票,还有一些代码可以检查 24 小时是否已经过去或没有使用'NOW()'and 'DATE_SUB( NOW(), 'INTERVAL 1 DAY'.

我目前正在尝试添加该功能以显示在用户可以使用下面的代码再次投票之前还剩多少时间。

$time = explode(" ", $voteCheck[1]);
$year = explode("-", $time[0]);
$date = explode(":", $time[1]);

// Set it all to one long string
$time = $year[0].$year[1].$year[2].$date[0].$date[1].$date[2];

// Current time and date
$cTime = date("YmdHis");

// I get lost here

votcheck 是一个来自 sql 字符串的数组,它只将第一行返回为 0 或 1。如果用户已经投票,则返回 1,如果用户可以再次投票,则返回 0。第二行返回用户投票的日期和时间。我似乎无法弄清楚在用户可以再次投票之前如何获得剩余的 x 小时数。

我的主要问题是 $time 字符串的长度有时是 13 有时是 14 个字符。

4

2 回答 2

2

好的,在这里

$voted = new DateTime($time);
$daylater = date('Y-m-d H:i:s', strtotime('+1 day', $voted->format('U')));
$canvote = new DateTime($daylater);
$now = new DateTime(date("Y-m-d H:i:s"));

$diff = $canvote->format('U') - $now->format('U'); 

if ( $diff > 0 && $diff < 86400 ) {
    $left = gmdate("H:i:s", $diff);
    echo $left . ' left till you can vote again';
} else {
    echo 'You can vote again' ;
}

让我知道它是否有效

于 2012-11-19T10:40:02.633 回答
0

不能直接strtotime()用来转换吗?$voteCheck[1]然后,您可以根据当前时间戳检查 unix 时间戳。

于 2012-11-19T10:24:10.360 回答