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