cron作业任务的日期时间问题



我正在一个自动登录网站上工作,我被如何正确确定日期的逻辑所困扰。

我为数据库创建了一个sql fiddlehttp://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(expry_date,NO()))>24

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)

建议您创建一个事件调度程序:

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
;

相关内容

  • 没有找到相关文章

最新更新