【问题标题】:how to check booking period is over from current date如何检查预订期是否从当前日期开始
【发布时间】:2017-06-09 09:03:36
【问题描述】:

我无法确定预订期是否结束?

我有 2 个 unix timestamp 这样 start =>2017-06-20 12:00:00End => 2017-06-23 12:00:00

在每次运行query 时,我想检查我当前的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 好的解决方案。

问题:如何知道预订日期已过?

请帮我解决这个问题,提前谢谢!!!

【问题讨论】:

  • 只使用在 mysql >= start<= end 之间签入
  • 请帮我解决一下,我还在寻找解决方案
  • mycurrentDate 在哪里/如何确定?它总是NOW(),还是日期/unix 时间戳,还是存储在数据库中的整数日限制值?
  • 那些不是时间戳。它们是 MySQL datetime 值。

标签: php mysql sql database performance


【解决方案1】:

假设mycurrentDateNOW()startend是事件发生的日期,预订的阈值是end日期。

您可以使用DATEDIFF 来确定距离活动结束的剩余天数,并检查结束日期是否已经过去,以使活动显示为 0。

EG:距离活动结束还有多少天

演示: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`

【讨论】:

  • days_remaining 更简单:GREATEST(DATEDIFF(..., now()), 0)
猜你喜欢
  • 1970-01-01
  • 2021-11-13
  • 2015-01-04
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多