php、cakePHP3を使用して、「第2月曜」などの日にちを取得したいと思っています。
https://php-archive.net/php/n-week/
こちらのサイトを見て、日にちを取得できることが分かったのですが、
特定の1日だけでなく、範囲の中で該当する日にち全てを取得する場合に有効なロジック?や関数などはありますでしょうか?
アドバイス等いただければと思います。
例)期間:2018年1月1日~2050年7月25日 第2、第3火曜、木曜
今考えている方法
PHP
1$fromY = 2018; 2$fromM = 1; 3$fromD = 1; 4 5$toY = 2050; 6$toM = 7; 7$toD = 25; 8 9$week_array = [2, 3]; // 2週、3週 10$week_of_day_array = [2, 4]; // 火曜、木曜 11 12$dates = []; // 期間中の日にちを入れる配列 13 14for ($year = $fromY ; $year <= $toY; $year++) { 15 for ($month = 1 ; $month <=12 ; $month++) { 16 if ($year == $fromY && $month < $fromM) { continue; } 17 if ($year == $toY && $month > $toM) { break; } 18 19 $datetime = new DateTime(); 20 $datetime->setTimezone( new DateTimeZone('Asia/Tokyo') ); 21 22 //その月の始まりは何曜日か 23 $datetime->setDate($year, $month, 1); 24 $w = (int)$datetime->format('w'); 25 26 foreach ($week_of_day_array as $wday) { 27 //指定された曜日の最初の日 28 $first = ($wday - $w >= 0) ? 1 + $wday - $w : 1 + $wday - $w + 7; 29 30 foreach ($week_array as $week) { 31 //日にちを算出 32 $day = $first + ( 7 * ($week - 1) ); 33 $datetime->setDate($year, $month, $day); 34 35 $dates[] = $datetime->format('Y-m-d'); // 日にち格納 36 } 37 } 38 } 39} 40
追記
期間や曜日、週などは不定となっているので
・期間:2018年1月1日~2050年7月25日 第1、第3火曜、木曜、
・期間:2018年1月31日~2019年12月25日 第5木曜、
・期間:2018年1月1日~2019年1月1日 第3日曜、月曜
など、多くのものに対応できるようにしたいと考えています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/24 03:50 編集
2019/05/24 04:07
2019/05/24 04:22
2019/05/27 00:24
2019/05/27 00:26
2019/05/27 00:32 編集
2019/05/27 00:37
2019/05/27 00:44
2019/05/27 01:20
2019/05/27 02:34