我每年都有一个场景:
预订表记录:
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月:没有日期
答案 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');
}
}