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の timediffを使用します。

何かのようなもの:

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

次のように、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 に答える
0

フィールド名「NextTime」(またはその他)のテーブルを作成し、

CURDATE() + 12 HOURS

そこで ..

その時間より前に更新が発生した場合は..無視してください

于 2013-05-12T17:21:28.100 に答える