mycurrentDate
假设是NOW()
,start
和end
是其中事件发生的日期,以及对于预定阈值是end
日期。
你可以使用DATEDIFF
来确定剩余的天数,直到事件结束,检查结束日期已过的事件显示为0。
EG:多少天,直到事件(S)结束
演示:http://sqlfiddle.com/#!9/95b548/2
使用过去,现在假设NOW()
是2017-06-21 12:00:00
和未来事件。
| id | start | end |
|----|---------------------|---------------------|
| 1 | 2017-06-20T12:00:00 | 2017-06-23T12:00:00 | #current
| 2 | 2017-06-01T12:00:00 | 2017-06-03T12:00:00 | #past
| 3 | 2017-07-01T12:00:00 | 2017-07-03T12:00:00 | #future
SELECT
id,
NOW() AS `current_date`,
`tn`.`start` AS `starts_on`,
`tn`.`end` AS `ends_on`,
IF(`tn`.`end` >= NOW(),
DATEDIFF(`tn`.`end`, NOW()), #show days until event ends
0 #the event has already passed
) AS `days_remaining`
FROM `table_name` AS `tn`
结果:
| id | current_date | start | end | days_remaining |
|----|---------------------|------------------------|------------------------|----------------|
| 1 | 2017-06-21T12:00:00 | June, 20 2017 12:00:00 | June, 23 2017 12:00:00 | 2 |
| 2 | 2017-06-21T12:00:00 | June, 01 2017 12:00:00 | June, 03 2017 12:00:00 | 0 |
| 3 | 2017-06-21T12:00:00 | July, 01 2017 12:00:00 | July, 03 2017 12:00:00 | 12 |
如果end
存储为UNIX时间戳,您可以用FROM_UNIXTIME()
将其转换为一个DATETIME值:
IF(FROM_UNIXTIME(`tn`.`end`) >= NOW(),
DATEDIFF(FROM_UNIXTIME(`tn`.`end`), NOW()),
0
) AS `days_remaining`
只是使用在中检查mysql'> = start'和'<= en d' – Ghost
请帮助我的解决方案,仍然在寻找解决方案 – EaB
'mycurrentDate'在哪里/如何确定?它是否总是存储在数据库中的NOW()或date/unix时间戳或整数日限制值? – fyrye