0

我每年有一个场景要玩:

预订表记录:
agent_id start_dt end_dt created_on hotel_id description
--------- 2012-02-27 2012-03-05 ------ ------ - ----------
--------- 2012-06-02 2012-06-04 ------ -------- -------- ---
--------- 2012-03-28 2012-04-02 ------ -------- ----------
----- ---- 2012-08-22 2012-09-10 ------ -------- ----------

有了这张表之后,现在我想有单独的日期特定年份的每个月,例如 2012 年或可能是 2013 年;

一月:无日期


二月: 2012-02-27, 2012-02-28


三月: 2012-03-1, 2012-03-2, 2012-03-3, 2012-03-4, 2012-03-5, 2012-03-28, 2012-03-29, 2012-03-30, 2012-03-31


四月: 2012-04-1, 2012-04-2


五月: 确实没有日期


六月: 2012-06-2, 2012-06-3, 2012-06-4


七月:确实没有日期


八月: 2012-08-22, 2012-08-23, 2012-08-24, 2012-08-25, 2012-08-26, 2012-08-27, 2012-08-28, 2012-08-29, 2012-08-30, 2012-08-31


九月:2012-09-1、2012-09-2、2012-09-3、2012-09-4、2012-09-5、2012-09-6、2012-09-7、2012-09-8、 2012-09-9, 2012-09-10


十月:无日期


十一月:无日期


十二月:无日期

4

2 回答 2

2

如果你想让 MySQL 为你计算它,

获取所有 start_dt :

SELECT group_concat(start_dt) as all_start_date, DATE_FORMAT(start_dt,'%M') as month 
FROM `your_table_name` 
GROUP BY DATE_FORMAT(start_dt,'%M')

要获取所有 end_dt(只需将所有 start_dt 更改为 end_dt):

SELECT group_concat(end_dt) as all_end_date, DATE_FORMAT(end_dt,'%M') as month 
FROM `your_table_name` 
GROUP BY DATE_FORMAT(end_dt,'%M')

如果您想添加特定条件,例如仅在 2012 年,您应该添加:

WHERE DATE_FORMAT(start_dt,'%Y') = '2012'

在 GROUP BY ...之前,它会是这样的,

SELECT group_concat(start_dt) as all_start_date, DATE_FORMAT(start_dt,'%M') as month 
FROM `your_table_name` 
WHERE DATE_FORMAT(start_dt,'%Y') = '2012' 
GROUP BY DATE_FORMAT(start_dt,'%M')
于 2013-03-17T10:29:22.110 回答
0

从 mysql 中选择所有日期,然后为每一行计算中间的日期,使用DatePeriod将每个日期放入第二个二维数组中,以月份 id 为键

$reservations_by_month = [];
foreach ($reservations as $reservation) {
    $begin = new DateTime($reservation['start_dt']);
    $end = new DateTime($reservation['end_dt']);
    $end = $end->modify('+1 day'); 

    $interval = new DateInterval('P1D');
    $daterange = new DatePeriod($begin, $interval ,$end);

    foreach($daterange as $date){
        $month = $date->format('m');
        if (!is_array($reservations_by_month[$month])) $reservations_by_month[$month] = [];
        $reservations_by_month[$month][] = $date->format('Y-m-d');
    }
}
于 2013-03-17T10:22:01.780 回答