【问题标题】:MySQL date/time calculationMySQL日期/时间计算
【发布时间】:2009-01-14 20:31:55
【问题描述】:

我的 mysql 表中有一个 datetime 列,分别称为 start_datestart_time。我希望我的用户能够为自己设置提醒,以便在 start_time 之前 X 小时发送,分钟。 1 小时,最长 24 小时。

我将运行一个 CRON 脚本来发送这些提醒。现在我做:

SELECT * FROM auctions WHERE start_date=CURDATE() AND status='0'

获取今天开始但尚未开始的所有拍卖。我的问题是,我如何才能知道现在的时间是否比 start_time 早几个小时 X,如果是,我可以向他们发送提醒。

有什么建议吗?

【问题讨论】:

    标签: php mysql datetime


    【解决方案1】:

    类似这样的:

    SELECT col1, col2, col3 
    FROM records 
    WHERE (records.startDate BETWEEN NOW() AND ADDDATE(NOW(), INTERVAL 9 HOUR)) 
    AND (records.status = '0');
    

    【讨论】:

      【解决方案2】:

      您是否有某些原因不能只使用一个简单的时间戳字段而不是一个用于日期和一个时间的字段。这样你就可以找到所有在接下来的 5 小时内开始的(比如说),通过做

      select * from auctions where start_ts between now() and now() + interval '5 hours';
      

      注意:间隔语法在数据库之间略有不同,这是 postgresql 的语法,因此您可能需要对 mysql 稍作更改。

      【讨论】:

        【解决方案3】:

        在发送所有答案并开始工作之前,我实际上是这样做的。因为我到了最后期限,所以我不能回去更改它:)

        $sql="SELECT HOUR(ADDTIME(CURTIME(),'$hour')) as remindHour, HOUR(CURTIME()) as curHour";
        $result=$this->db->query($sql);
        
        extract($result->getAllSingle());
        
        if ($remindHour <=$curHour) {
            // Send reminders
        }
        

        【讨论】:

          【解决方案4】:

          你可以使用unixtime来节省时间吗?

          因为 PHP 有一个很棒的函数叫做strtotime

          在里面你可以说。 strtotime("+20 hours") 并获取从现在起 20 小时的 unixtime。

          那么就是哪个字段比哪个大的问题,如果是,发送通知。

          【讨论】:

          • 你为什么认为他在运行 PHP?首先,他将使用 cronjob,这表明它可能不是 PHP。其次,为什么需要使用 strtotime 以秒为单位计算 20 小时?这是基本的数学......
          • 为什么 cronjob 会显示它不是 PHP?
          猜你喜欢
          • 2011-09-24
          • 1970-01-01
          • 1970-01-01
          • 2012-07-18
          • 1970-01-01
          • 2014-03-04
          • 2018-02-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多