每个月的预订日期范围

时间:2013-03-17 10:07:14

标签: php mysql date

我每年都有一个场景:

预订表记录:
AGENT_ID start_dt END_DT created_on HOTEL_ID描述
--------- 2012-02-27 2012-03-05 ------ ------- ----------
--------- 2012-06-02 2012-06-04 ------ ------- ----------
--------- 2012-03-28 2012-04-02 ------ ------- ----------
--------- 2012-08-22 2012年9月10日------ ------- ----------

拥有此表后,现在我希望每个月的特定年份都有单独的日期,如2012年或2013年;

  

1月:没有日期


  

二月: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


  

10月:没有日期


  

11月:没有日期


  

12月:没有日期

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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');
    }
}