2017-06-09 10 views
1

予約期間が終了したかどうかを判断するのに問題がありますか?予約期間を確認する方法は現在の日付より後で

私はこのような2 unix timestampが =>2017-06-20 12:00:00エンドquery iは、時間が経過しているかどうかを確認したい実行されるたびに=>2017-06-23 12:00:00

(I、Eの予約期間を開始持っています)に達するか、されていない私のi)はphpを使用して渡すことができる(date現在

私の擬似コード:

ソリューション
希望
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 

}

:私は良いphp解決策も歓迎され、mysql特定のソリューションを探しています。

質問:事前予約日の期限が切れていることを知る方法を教えてください。

私はこれを解決するために助けてください、事前に感謝! mycurrentDateNOW()startendであると仮定すると、

+0

だけで使用mysql '> = start'と' <= enのチェックの間にd' – Ghost

+0

あなたのソリューションで私を助けてください、まだ私は解決策を探しています – EaB

+0

どこで/どのように 'mycurrentDate'が決定されていますか?それは常に 'NOW()'か、日付/ユニックスのタイムスタンプか、データベースに格納されている整数の日の制限値ですか? – fyrye

答えて

2

は、イベントが発生した日付であり、予約のためのしきい値はend日付です。終了日が既に0

EGを表示するには、イベントのために経過している場合は、イベントが終了するまでの残りの日数を決定し、チェックするためにDATEDIFFを使用することができ

:どのように多くの日のイベントまでの(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タイムスタンプとして格納されている場合は、DATETIME値に変換するFROM_UNIXTIME()を使用することができます。

IF(FROM_UNIXTIME(`tn`.`end`) >= NOW(), 
    DATEDIFF(FROM_UNIXTIME(`tn`.`end`), NOW()), 
    0 
) AS `days_remaining` 
+1

'days_remaining'のほうが簡単です:' GREATEST(DATEDIFF(...、now())、0) '。 –

関連する問題