0

こんにちは、投票システムがあります。

人が投票すると、「nextVote」という名前の列があります。

その列には、ユーザーが再び投票できる日付が保持されます。その列までに、彼が投票するまでに何時間/分待つ必要があるかを確認できます。

それが私の試みです:

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

そして、それが保存するもの:

2013-05-14 05:56:24

どうして?..

私がやろうとしているのは、現在の時間 + 12 時間です。

今日が 2013 年 5 月 14 日 12:00 の場合。

12時間で

2013, 05, 14, 24:00 なんでそうしないの?

    public function getTimeLeft($ip)
    {
        $this->get = $this->pdo->prepare
        ("
            SELECT TIMESTAMPDIFF(MINUTE, `nextVote`, NOW())
            FROM auths
            WHERE `voter_ip` = :ip
        ");
        $echo = $this->get->execute(array(":ip" => $ip));

        return $echo;
    }
4

3 に答える 3

1

データベースは GMT を使用しているように見えます。データベースのタイムゾーンを変更できますが、他のマシンがそれを使用している場合、実稼働マシンでは難しい場合があります。問題は解決するはずです。または、これを試してください

$date = date( 'Y-m-d H:i:s', strtotime( 'now +12 hours' ) );
$sql = "UPDATE auths SET nextVote = '{$date}' WHERE voter_ip = :ip";

タイムゾーンを更新したい場合(そして ubuntu を使用している場合)、実行しますdkpg-reconfigure tzdata

于 2013-05-13T15:05:06.547 に答える
0

次の日付をその日の境界に合わせたい場合...今から12 時間後とは対照的に、日付の計算結果をラップしDATE()て、datetime フィールドの日付だけにトリミングすることができます。

UPDATE auths SET nextVote = DATE(DATE_ADD(NOW(), INTERVAL 1 DAY)) WHERE voter_ip = :ip
于 2013-05-13T15:08:52.380 に答える