2017-06-09 46 views
1

我無法確定預訂期限是否結束?如何查看預訂期限從當前日期結束

我有2 unix timestamp這樣啓動 =>2017-06-20 12:00:00結束 =>2017-06-23 12:00:00

每個query運行我要檢查時間是否已過去或不是時間上(I,E預訂週期從達到或不)我的當前date(我可以通過使用php

我的僞代碼:

select timestampdiff(DAY, '2017-06-20 12:00:00', '2017-06-23 12:00:00'); returns 3 

    returnedDate = 3; // returns difference either in date format or no.of days 

if((returnedDate - mycurrentDate) == 0){ 


     //your booking period is over 

}else{ 


    // no of remaining days 

}

期望解:我正在尋找mysql具體的解決方案,很好的解決php也歡迎。

問題:如何知道預訂日期是否過期?

請幫我解決這個,在此先感謝!

+0

只是使用在中檢查mysql'> = start'和'<= en d' – Ghost

+0

請幫助我的解決方案,仍然在尋找解決方案 – EaB

+0

'mycurrentDate'在哪裏/如何確定?它是否總是存儲在數據庫中的NOW()或date/unix時間戳或整數日限制值? – fyrye

回答

2

mycurrentDate假設是NOW()startend是其中事件發生的日期,以及對於預定閾值是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` 
+1

'days_remaining'簡單:'GREATEST(DATEDIFF(...,now()),0)'。 –

相關問題