【问题标题】:Check if the time is more than 24h and show it检查时间是否超过24小时并显示
【发布时间】:2021-04-17 01:25:33
【问题描述】:

我的 MSSQL 数据库中有一个数据类型为 datetime 的列,其中包含一些格式为 2021-01-11 19:58:04.277 的日期。

这是一个投票系统,其理念是用户每 24 小时只能投票一次。

每次他们投票时,此表都会更新一条新记录,并为相应的用户添加一个新日期。

我想显示一条消息,说明距离下一次投票还有多少小时。

这是我正在尝试使用的代码:

 /**
 * Get Votes Time
 * 
 */
public function getVoteRemainingTime($account) {
    date_default_timezone_get();
    $currentTime = date('Y-m-d H:i:s');

    $sql = "SELECT VoteDate FROM dbo.vote WHERE Account = :account ORDER BY logid DESC";
    $query = $this->db->prepare($sql);
    $query->execute(array(':account' => $account)); 
    $voteDate = $query->fetch(PDO::FETCH_OBJ);

    $timeLeftVote = strtotime($currentTime) - strtotime($voteDate->VoteDate);

    if($timeLeftVote > 86400) {
        return '<strong>Vote Available!</strong>';
    } else {
        return $timeLeftVote;
    }

}

但它显示的信息有误。我做错了什么?非常感谢您的帮助。

谢谢!

【问题讨论】:

  • ...显示错误信息...是什么意思?

标签: php sql-server datetime pdo


【解决方案1】:

由于我无法检查您的数据库查询,我只检查了其余代码,如果我用静态日期替换 $voteDate-&gt;VoteDate,它似乎可以工作(正如本文 cmets 中提到的 Fikri F)。

所以请提供更多信息。您可以将数据库中的当前时间和上一次投票时间输出为字符串,并输出两个日期以及 strtotime 的结果,最后输出该方法的结果。然后请解释一下,错误的行为是什么。这样,我们可以将问题缩小到 DB 查询或 PHP 代码。 (我会写这个作为评论,但我没有足够的声誉。)

【讨论】:

  • 感谢您的宝贵时间,我已经解决了问题。
【解决方案2】:

而不是SELECT VoteDate FROM dbo.vote

你能在数据库中使用源代码计算时差吗

SELECT VoteDate, DATEDIFF(HOUR, VoteDate, GETDATE()) as HourDifference from dbo.vote

【讨论】:

    【解决方案3】:

    您需要声明date() 的格式参数,例如date('Y-m-d H:i:s')

    date_default_timezone_get();
    $currentTime = date('Y-m-d H:i:s');
    
    $timeLeftVote = strtotime($currentTime) - strtotime('2021-01-11 19:58:04.277');
    if($timeLeftVote > 86400){
        echo 'Vote available';
    }else{
        echo $timeLeftVote;
    }
    

    【讨论】:

    • 它仍然返回不正确的值。
    • 可能是因为当您获得 VoteDate 时它不会只调用一个数据,请尝试在 ORDER BY logid DESC 之后使用 LIMIT 1
    • 我已将其更改为:"SELECT TOP 1 VoteDate FROM dbo.vote WHERE Account = :account ORDER BY VoteDate DESC" 为了获得插入数据库的最后投票日期。但还是同样的问题
    • echo $voteDate-&gt;VoteDate可以告诉我结果吗?
    • 通过echo $voteDate-&gt;VoteDate,这是输出2021-01-11 19:58:04.277。此值存储在 MSSQL 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2021-04-03
    相关资源
    最近更新 更多