【问题标题】:Booking Dates Availability Ranges in PHP/MySQLPHP/MySQL 中的预订日期可用性范围
【发布时间】:2013-01-10 14:26:36
【问题描述】:

我有两个字段,check_in 和 nights。

晚数包括入住日期。因此,如果客户预订了 1 晚,他将在第二天结帐,然后房间就可以预订了(除非已经被其他人预订了)。

这是我的表中的几个记录的示例,

customer          room            check_in            nights
cus1              test room       2013-01-23          2
cus2              test room       2013-01-25          1
cus3              test room       2013-01-26          4

cus3 已经预订了房间,他们将于 2013 年 1 月 26 日入住,入住 4 晚。这意味着该房间在此期间将无法预订。

那么我如何检查房间是否可用?

该房间应仅可在 2013-01-30 入住。

感谢所有帮助:)

【问题讨论】:

  • 您想查看下一个房间何时可用(例如,从当前日期开始)?或者您想检查房间在给定日期是否可用?
  • @StephenBooher 我想传递一个给定的日期,如果可能,如果房间可用,则返回 true,如果房间不可用,则返回 false。

标签: php mysql date between


【解决方案1】:

当您获取客户行的数据时,使用它来获取结帐日期:

$check_out = date('Y-m-d', strtotime($row['check_in'].' + '.$row['nights'].' days'));

【讨论】:

    【解决方案2】:

    类似的,

    SELECT room, 
           CASE WHEN 'dateHere' BETWEEN check_in AND check_out
               THEN 'UNAVAILABLE'
               ELSE 'AVAILABLE'
           END Status
    FROM
      (
          SELECT  room, 
                  check_in, 
                  DATE_ADD(check_in, INTERVAL nights day) check_out
          FROM    booking
      ) s
    

    【讨论】:

    • 这几乎是完美的,我忘了补充说我将发送一个日期和请求的夜数。因此,如果 x 日期可用于 x 夜数
    • 你能举个例子吗?
    • (以我提供的现有数据为例)。客户想在2013-01-21预订房间并入住,他们想住4天。他们应该无法预订房间,因为该范围内已有预订。
    • 用这个查询创建一个存储过程怎么样,<< CLICK HERE >>
    • 我没有创建存储过程的权限我不认为:(。另外看看你的例子,如果有成千上万的预订,看起来它会返回每一行,我会只喜欢返回“测试房间”是否可用。我有一个房间列表,比如房间 1、房间 2、房间 3、房间 4。我需要返回该列表中在给定日期和夜晚可用的房间。跨度>
    【解决方案3】:

    有一个很棒的网站,其中包含用于常见场景的 MySQL 语句列表。检查给定时间段内是否有房间是其中之一:http://www.artfulsoftware.com/infotree/queries.php#576

    【讨论】:

      【解决方案4】:

      当您选择入住日期和入住的夜晚时,您可以执行以下操作(虚拟代码):

          $startDate='2013-01-26';//for example
          $to_time=date("Y-m-d", strtotime("$startDate + 4 day"));
          echo $to_time;//prints 2013-01-30
      

      【讨论】:

        猜你喜欢
        • 2014-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多