【问题标题】:Issue with date time for cron job taskcron 作业任务的日期时间问题
【发布时间】:2013-02-05 09:55:05
【问题描述】:

我正在开发一个自动列表网站,但我陷入了如何获取正确日期背后的一些逻辑。

我为数据库创建了一个 sql fiddle http://www.sqlfiddle.com/#!2/e111e/3

我想每天上午 12 点运行一个 cron,我想通过电子邮件向其列表将在一天内过期(忽略已经过期的列表)的用户发送电子邮件,但他们之间必须有 24 小时的差异,因为我想要至少提前 24 小时告诉他们该列表即将过期。此外,它应该只选择那些将在一天后到期且不超过 1 天的列表。

这是我目前尝试过的

SELECT DATE_FORMAT(expiry_date, '%b %d %Y %T') AS expiry_date, DATEDIFF(expiry_date, NOW()) AS days_left FROM `test` WHERE DATEDIFF(expiry_date, NOW()) = 1

但它也在选择哪些将在 24 小时内到期。

请帮帮我。

编辑 ///////////////////////////////////////// /////////////

我已经想通了。告诉我它是否正确。

 SELECT DATE_FORMAT(expiry_date, '%b %d %Y %T') AS expiry_date, DATEDIFF(expiry_date, NOW()) AS days_left, HOUR(TIMEDIFF(expiry_date, NOW())) as hours FROM `test`

在哪里 DATEDIFF(expiry_date, NOW()) = 1 AND HOUR(TIMEDIFF(expiry_date, NOW())) > 24

【问题讨论】:

    标签: mysql sql database datetime


    【解决方案1】:

    MySQL 的datediff 只考虑实际天数,而不是小时数。尝试使用TO_SECONDS 并以秒为单位。

    更新:这是与小提琴一起使用的代码:

    SELECT DATE_FORMAT(expiry_date, '%b %d %Y %T') AS expDate,
      to_seconds(expiry_date) - to_seconds(NOW()) AS seconds_left
    FROM `test`
    WHERE
      to_seconds(expiry_date)- to_seconds(now()) <= 86400
      -- AND ... (only include non-expired entries)
    

    【讨论】:

    • 感谢伙伴的帮助。我添加的查询怎么样?你认为它的方式也正确吗?查看我的编辑
    • 不确定,但是拆分天和小时值总是有点棘手。何必呢?为什么不直接取绝对值(例如以秒为单位)并用它来进行比较?
    • 感谢您的帮助好友。您的解决方案是有效的,但 TO_SECONDS 可用于 MYSQL > 5.5。因此,如果客户端的 msyql > 5.5 版本,我将使用它
    【解决方案2】:

    建议你create an event scheduler:

    CREATE EVENT EXIPRIYALERT 
    ON SCHEDULE EVERY DAY AT '00:00:00' STARTING FROM  '2013-02-04'
    DO 
      ---
    

    对于您的查询,试试这个:TIMESTAMPDIFF:

    TIMESTAMPDIFF(second,Now(),expiry_date)

    SELECT DATE_FORMAT(expiry_date, '%b %d %Y %T') AS expiry_date, 
    DATEDIFF(expiry_date, NOW()) AS days_left 
    FROM `test` 
    WHERE TIMESTAMPDIFF(second,Now(),expiry_date) = 86400
    ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 2012-02-26
      • 2012-08-01
      • 2011-08-18
      • 1970-01-01
      相关资源
      最近更新 更多