2017-06-09 48 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)'。 –

相关问题