【问题标题】:Get total amount of days for the month between 2 dates grouped by month获取按月分组的 2 个日期之间该月的总天数
【发布时间】:2019-05-04 22:03:29
【问题描述】:

我有一个酒店客房预订系统,有时预订会在一个月内开始并在另一个月内完成。例如 2019 年 4 月 22 日至 2019 年 5 月 7 日。

我需要能够查看房间在 4 月份被预订了多少天。

不知道如何减少下个月的重叠天数。

如果我有这些预订:

07/Apr/2019 to 12/Apr/2019
22/Apr/2019 to 07/May/2019
29/May/2019 to 03/June/2019

它应该给我:

2019 年 4 月:13 天 2019 年 5 月:10 天 2019 年 6 月:3 天

我尝试使用 DATEDIFFSUM,但它也添加了 MAY 日期。


$sql = "SELECT 
id, SUM(DATEDIFF(booking_to, transaction_date)) + 1 AS occup,
COALESCE(COUNT(id), 0) AS `transactions`,
COALESCE(SUM(revenue), 0) AS `revenue`
FROM transactions
WHERE property_id = $pvid
AND MONTH(transaction_date) = $tranmonth 
AND YEAR(transaction_date) = $tranyear
group by property_id"; 

目前它给了我 20 天,这是不正确的。

是否可以只预订四月份的天数?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您可能需要的是当月的最后一天和 diff 之后

    SELECT LAST_DAY(NOW());
    

    编辑:

         select now() as now, timestampdiff(day, now(), last_day(now())) as diff;
    +---------------------+------+
    | now                 | diff |
    +---------------------+------+
    | 2019-05-04 05:48:43 |   26 |
    +---------------------+------+
    1 row in set (0.00 sec)
    

    【讨论】:

    • 感谢您的回复,现在的问题是它也从下个月开始计算天数。我只需要它来计算每月有多少天。
    • 上述方法计算从今天到月底的天数。将其更改为对您有意义的任何内容select now() as now, timestampdiff(day, '2019-05-22 15:20:12', last_day('2019-05-22 15:20:12')) as diff;
    • 谢谢,这并没有解决我的问题。我在这里找到了一个解决方案link 他展示了如何做到这一点并获得合适的天数。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多