当前时间+12小时

时间:2013-05-13 15:01:05

标签: php

你好,我有一个投票系统。

一旦一个人投票,我就有一个名为“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年,05年,14年和12月。

在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;
    }

3 个答案:

答案 0 :(得分:1)

问题是您希望在本地时区得到一个结果。默认情况下,MySQL在调用NOW()或任何其他时间/日期相关函数时使用系统时区生成时间戳。

您可以按照here所述将--timezone参数传递给MySQL来更改服务器上的时区。

但是,时区与您的申请无关,因为您只对相对时间感兴趣。您的应用程序的用户可能处于任何时区,因此没有必要假设一个特定的时区。

答案 1 :(得分: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

答案 2 :(得分:0)

如果您希望下一个日期在当天的边界...而不是从现在到分钟的 12小时 - 您可以在日期数据周围包裹DATE()结果,它会将其修剪为日期时间字段的日期。

UPDATE auths SET nextVote = DATE(DATE_ADD(NOW(), INTERVAL 1 DAY)) WHERE voter_ip = :ip