質問編集履歴

1

変更

2021/01/24 04:47

投稿

ykkk
ykkk

スコア91

test CHANGED
@@ -1 +1 @@
1
- laravel,phpを使ってカレンダー作成で祝日対応ができない
1
+ laravel,php
test CHANGED
@@ -1,265 +1 @@
1
- 環境:Windows10,XAMPP,HeidiSQL
2
-
3
- 【データベース】
4
-
5
- テーブル名:holidays
6
-
7
- カラム:     id day description
8
-
9
- 入っているもの: 1 2021-01-01 元旦
10
-
11
-          2 2021-01-11 成人の日
12
-
13
-
14
-
15
- ![イメージ説明](124d3409b1ad4f95b3c078ee2068b636.png)
16
-
17
-
18
-
19
- カレンダーは出来ていますが、祝日の日は文字赤、祝日の名称をいれたい
20
-
21
-
22
-
23
- dd($item->day);をおこなって2021-01-01はとれています。
24
-
25
- が色が変わりません。(祝日の名称の入れ込みはわからず)
26
-
27
- また、dd($item->day);を行った際2021-01-11はとれていない。
28
-
29
-
30
-
31
- ```ここに言語を入力
32
-
33
- <?php
34
-
35
-
36
-
37
- use Carbon\Carbon;
38
-
39
-
40
-
41
- $m = isset($_GET['m'])? htmlspecialchars($_GET['m'], ENT_QUOTES, 'utf-8') : '';
42
-
43
- $y = isset($_GET['y'])? htmlspecialchars($_GET['y'], ENT_QUOTES, 'utf-8') : '';
44
-
45
- if($m!=''||$y!=''){
46
-
47
- $dt = Carbon::createFromDate($y,$m,01);
48
-
49
- }else{
50
-
51
- $dt = Carbon::createFromDate();
52
-
53
- }
54
-
55
-
56
-
57
- renderCalendar($dt);
58
-
59
-
60
-
61
- function renderCalendar($dt)
62
-
63
- {
64
-
65
- $dt->startOfMonth(); //今月の最初の日
66
-
67
- $dt->timezone = 'Asia/Tokyo'; //日本時刻で表示
68
-
69
-
70
-
71
- //1ヶ月前
72
-
73
- $sub = Carbon::createFromDate($dt->year,$dt->month,$dt->day);
74
-
75
- $subMonth = $sub->subMonth();
76
-
77
- $subY = $subMonth->year;
78
-
79
- $subM = $subMonth->month;
80
-
81
-
82
-
83
- //1ヶ月後
84
-
85
- $add = Carbon::createFromDate($dt->year,$dt->month,$dt->day);
86
-
87
- $addMonth = $add->addMonth();
88
-
89
- $addY = $addMonth->year;
90
-
91
- $addM = $addMonth->month;
92
-
93
-
94
-
95
- //リンク
96
-
97
- $title = '<caption><a href="./calendar?y='.$subY.'&&m='.$subM.'"><<前月 </a>';//前月のリンク
98
-
99
- $title .= $dt->format('F Y');//月と年を表示
100
-
101
- $title .= '<a href="./calendar?y='.$addY.'&&m='.$addM.'"> 来月>></a></caption>';//来月リンク
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
- //曜日の配列作成
112
-
113
- $headings = ['月','火','水','木','金','土','日'];
114
-
115
-
116
-
117
- $calendar = '<table class="table" border=1>';
1
+ laravel,phplaravel,phplaravel,phplaravel,phplaravel,phplaravel,phplaravel,php
118
-
119
- $calendar .= '<thead >';
120
-
121
- foreach($headings as $heading){
122
-
123
- $calendar .= '<th class="header">'.$heading.'</th>';
124
-
125
- }
126
-
127
- $calendar .= '</thead>';
128
-
129
-
130
-
131
- $calendar .= '<tbody><tr>';
132
-
133
-
134
-
135
-
136
-
137
- //今月は何日まであるか
138
-
139
- $daysInMonth = $dt->daysInMonth;
140
-
141
-
142
-
143
- for ($i = 1; $i <= $daysInMonth; $i++) {
144
-
145
-
146
-
147
- if($i==1){
148
-
149
- if ($dt->format('N')!= 1) {
150
-
151
- $calendar .= '<td colspan="'.($dt->format('N')-1).'"></td>'; //1日が月曜じゃない場合はcospanでその分あける
152
-
153
- }
154
-
155
- }
156
-
157
- if($dt->format('N') == 1){
158
-
159
- $calendar .= '</tr><tr>'; //月曜日だったら改行
160
-
161
- }
162
-
163
-
164
-
165
-
166
-
167
- $comp = new Carbon($dt->year."-".$dt->month."-".$dt->day); //ループで表示している日
168
-
169
- $comp_now = Carbon::today(); //今日
170
-
171
- $items = DB::select('select * from holidays');
172
-
173
-
174
-
175
- foreach($items as $item)
176
-
177
- {
178
-
179
- if($comp->eq($item->day)){
180
-
181
-
182
-
183
- $calendar .= '<td class="day" style="background-color:#f08080; color:#990000;">'.$dt->day.'</td>';
184
-
185
- }
186
-
187
- }
188
-
189
-
190
-
191
- //ループの日と今日を比較
192
-
193
- if ($comp->eq($comp_now)) {
194
-
195
- //同じなので黄色の背景にする
196
-
197
- $calendar .= '<td class="day" style="background-color:#FFFF66;">'.$dt->day.'</td>';
198
-
199
- }else{
200
-
201
-
202
-
203
-
204
-
205
- switch ($dt->format('N')) {
206
-
207
- case 6:
208
-
209
- $calendar .= '<td class="day" style="background-color:#66CCFF; color:#3366CC;">'.$dt->day.'</td>';
210
-
211
- break;
212
-
213
- case 7:
214
-
215
- $calendar .= '<td class="day" style="background-color:#f08080; color:#990000;">'.$dt->day.'</td>';
216
-
217
- break;
218
-
219
- default:
220
-
221
- $calendar .= '<td class="day" >'.$dt->day.'</td>';
222
-
223
- break;
224
-
225
- }
226
-
227
- }
228
-
229
-
230
-
231
- //祝日対応
232
-
233
- $items = DB::select('select * from holidays');
234
-
235
- foreach($items as $item){
236
-
237
- if($comp->eq($item->day)){
238
-
239
- $calendar .= '<td class="day" style="background-color:#FFFF66;">'.$dt->day.'</td>';
240
-
241
- }
242
-
243
-
244
-
245
- }
246
-
247
-
248
-
249
- $dt->addDay();
250
-
251
- }
252
-
253
-
254
-
255
- $calendar .= '</tr></tbody>';
256
-
257
- $calendar .= '</table>';
258
-
259
-
260
-
261
- echo $title.$calendar;
262
-
263
- }
264
-
265
- ```