1

我有投票系统。

一个人投票后,他将在另外 12 个小时内无法投票。

我想做的是,一个回声告诉他他什么时候可以再次投票。

例子:

You will be able to vote in 11 hours, and 04 minutes

我想到的:

当用户完成操作时,我将发送一个包含所有详细信息的查询,然后将“Next_vote”列设置为:

CURDATE() + 12 HOURS

然后执行 next_vote 减去 date(),然后它会给我多少小时/分钟,直到我可以再次投票。

但问题是,我不确定我将如何做到这一点,因此我需要一些帮助。

这是一个好方法并且应该有效吗?我该怎么做?

编辑::

    public function getTimeLeft($ip)
    {
        $this->get = $this->pdo->prepare("SELECT DATE_FORMAT(TIMEDIFF(CURDATE(), 'nextVote')) FROM auths WHERE voter_ip = :ip");
        $this->get->execute(array(":ip" => $ip));
    }

    public final function setNextVote($ip)
    {
        $this->insert = $this->pdo->prepare("UPDATE auths SET nextVote = CURDATE() + 12 HOURS WHERE voter_ip = :ip");
        $this->insert->execute(array(":ip" => $ip));
    }

            $minutes = floor($vote->getTimeLeft($_SERVER['REMOTE_ADDR']) / 3600);
            $hours = floor( ($vote->getTimeLeft($_SERVER['REMOTE_ADDR']) / 60) % 60);
4

3 回答 3

2

使用 SQL时间差异

就像是:

SELECT DATE_FORMAT(TIMEDIFF(CURDATE(), 'NameOfField'));

然后使用您最喜欢的服务器端语言将秒数转换为更好的值。

例如在 PHP 中:

$totalSeconds = /* get from query using PDO or mysqli */

$hours = floor($totalSeconds / 3600);
$minutes = floor(($totalSeconds / 60) % 60);

echo "You will be about to vote in $hours hours, and $minutes minutes.";
于 2013-05-12T17:28:11.890 回答
0

制作一个字段名称为“NextTime”(或其他名称)的表格,然后将您的

CURDATE() + 12 HOURS

在那里 ..

如果在那之前发生任何更新..忽略它

于 2013-05-12T17:21:28.100 回答
0

您可以使用 MySQL 来获取 2 个日期之间的时间差异,如下所示:

SELECT
    TIMEDIFF('2013-05-12 10:00:00','2013-03-11 11:23:00') as total_time,
    HOUR(TIMEDIFF('2013-05-12 10:00:00','2013-03-11 11:23:00')) as hour_dif,
    MINUTE(TIMEDIFF('2013-05-12 10:00:00','2013-03-11 11:23:00')) as minute_dif

结果会是这样

total_time: 22:37:00
hour_dif: 22
minute_dif: 37

您可以将日期替换为当前日期字段示例:TIMEDIFF(date1,date2)

于 2013-05-12T17:37:15.593 回答