0

年ごとにプレイするシナリオがあります:

Booking table records:
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 年などの特定の年のみの毎月。

1月: 日付なし


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


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


4 月: 2012 年 4 月 1 日、2012 年4 月 2 日


5月:確かに日付はありません


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


7月: 確かに日付はありません


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


9月: 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月:無休

4

2 に答える 2

0

mysql からすべての日付を選択し、各行についてDatePeriodを使用してその間の日付を計算し、月の ID をキーとして各日付を 2 番目の 2 次元配列に入れます。

$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 に答える