回答編集履歴
4
加筆
test
CHANGED
@@ -325,3 +325,47 @@
|
|
325
325
|
var_dump($res); // 2015-05-07
|
326
326
|
|
327
327
|
```
|
328
|
+
|
329
|
+
|
330
|
+
|
331
|
+
---
|
332
|
+
|
333
|
+
|
334
|
+
|
335
|
+
> 例
|
336
|
+
|
337
|
+
> スタートの日付
|
338
|
+
|
339
|
+
> 本日10月17日土曜にアクセス
|
340
|
+
|
341
|
+
> 10月19日月曜と処理したい
|
342
|
+
|
343
|
+
>
|
344
|
+
|
345
|
+
> 今のプログラムだと
|
346
|
+
|
347
|
+
> 3営業後は
|
348
|
+
|
349
|
+
> 21日水曜日になってしまいますが、狙っている結果は22日木曜日です。
|
350
|
+
|
351
|
+
|
352
|
+
|
353
|
+
この条件おかしいのでは???
|
354
|
+
|
355
|
+
|
356
|
+
|
357
|
+
10/17(土)基準日
|
358
|
+
|
359
|
+
10/18(日)
|
360
|
+
|
361
|
+
10/19(月)1営業日後 - 引数には1を渡す(または未指定のときは暗黙的に翌営業日として扱う)
|
362
|
+
|
363
|
+
10/20(火)2営業日後 - 引数には2を渡す
|
364
|
+
|
365
|
+
10/21(水)3営業日後 - 引数には3を渡す
|
366
|
+
|
367
|
+
10/22(木)4営業日後 - 引数には4を渡す
|
368
|
+
|
369
|
+
|
370
|
+
|
371
|
+
このように考えたほうが、利用場面で自然だと思いますが…
|
3
修正
test
CHANGED
@@ -24,16 +24,6 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
// PEAR ライブラリ で出る、PHP Deprecated: Non-static method ... を抑止
|
28
|
-
|
29
|
-
error_reporting(E_NOTICE);
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
require_once PEAR_INSTALL_DIR . '/Date/Holidays.php';
|
34
|
-
|
35
|
-
|
36
|
-
|
37
27
|
/**
|
38
28
|
|
39
29
|
* カレンダークラス
|
@@ -156,6 +146,14 @@
|
|
156
146
|
|
157
147
|
// 未取得のとき
|
158
148
|
|
149
|
+
$errorLevel = error_reporting(); // エラー出力レベルを取得
|
150
|
+
|
151
|
+
error_reporting(E_NOTICE); // PHP Deprecated: Non-static method... を抑止
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
require_once 'Date/Holidays.php';
|
156
|
+
|
159
157
|
$dh = Date_Holidays::factory('Japan', $year, 'ja_JP');
|
160
158
|
|
161
159
|
$holidays = array();
|
@@ -166,6 +164,10 @@
|
|
166
164
|
|
167
165
|
}
|
168
166
|
|
167
|
+
error_reporting($errorLevel); // エラー出力レベルを戻す
|
168
|
+
|
169
|
+
|
170
|
+
|
169
171
|
ksort($holidays);
|
170
172
|
|
171
173
|
|
@@ -238,7 +240,7 @@
|
|
238
240
|
|
239
241
|
* @param integer $dateAfter 指定しない時は翌営業日を返す
|
240
242
|
|
241
|
-
* @param \Datetime $objDate 基準日
|
243
|
+
* @param \Datetime $objDate 基準日
|
242
244
|
|
243
245
|
* @return \Datetime
|
244
246
|
|
2
追記
test
CHANGED
@@ -24,6 +24,12 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
+
// PEAR ライブラリ で出る、PHP Deprecated: Non-static method ... を抑止
|
28
|
+
|
29
|
+
error_reporting(E_NOTICE);
|
30
|
+
|
31
|
+
|
32
|
+
|
27
33
|
require_once PEAR_INSTALL_DIR . '/Date/Holidays.php';
|
28
34
|
|
29
35
|
|
@@ -44,6 +50,76 @@
|
|
44
50
|
|
45
51
|
/**
|
46
52
|
|
53
|
+
* 日曜日
|
54
|
+
|
55
|
+
*/
|
56
|
+
|
57
|
+
const T_SUNDAY = 0;
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
/**
|
62
|
+
|
63
|
+
* 月曜日
|
64
|
+
|
65
|
+
*/
|
66
|
+
|
67
|
+
const T_MONDAY = 1;
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
/**
|
72
|
+
|
73
|
+
* 火曜日
|
74
|
+
|
75
|
+
*/
|
76
|
+
|
77
|
+
const T_TUESDAY = 2;
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
/**
|
82
|
+
|
83
|
+
* 水曜日
|
84
|
+
|
85
|
+
*/
|
86
|
+
|
87
|
+
const T_WEDNESDAY = 3;
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
/**
|
92
|
+
|
93
|
+
* 木曜日
|
94
|
+
|
95
|
+
*/
|
96
|
+
|
97
|
+
const T_THURSDAY = 4;
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
/**
|
102
|
+
|
103
|
+
* 金曜日
|
104
|
+
|
105
|
+
*/
|
106
|
+
|
107
|
+
const T_FRIDAY = 5;
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
/**
|
112
|
+
|
113
|
+
* 土曜日
|
114
|
+
|
115
|
+
*/
|
116
|
+
|
117
|
+
const T_SATURDAY = 6;
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
/**
|
122
|
+
|
47
123
|
* キャッシュに使用する祝日配列
|
48
124
|
|
49
125
|
* @var array(YYYY => array('YYYY-mm-dd' => '祝日名'))
|
@@ -128,11 +204,41 @@
|
|
128
204
|
|
129
205
|
/**
|
130
206
|
|
207
|
+
* 定休日かどうかを判定する
|
208
|
+
|
209
|
+
* @param \DateTime $objDate 判定する日付
|
210
|
+
|
211
|
+
* @return bool 定休日ならtrue
|
212
|
+
|
213
|
+
*/
|
214
|
+
|
215
|
+
public static function isRegularHoliday(\DateTime $objDate)
|
216
|
+
|
217
|
+
{
|
218
|
+
|
219
|
+
//定休日リスト
|
220
|
+
|
221
|
+
$arrRegularHoliday = array(
|
222
|
+
|
223
|
+
self::T_SUNDAY
|
224
|
+
|
225
|
+
, self::T_SATURDAY
|
226
|
+
|
227
|
+
);
|
228
|
+
|
229
|
+
return in_array($objDate->format('w'), $arrRegularHoliday);
|
230
|
+
|
231
|
+
}
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
/**
|
236
|
+
|
131
237
|
* ○日後の営業日を取得する
|
132
238
|
|
133
239
|
* @param integer $dateAfter 指定しない時は翌営業日を返す
|
134
240
|
|
135
|
-
* @param \Datetime $objDate 基準日
|
241
|
+
* @param \Datetime $objDate 基準日 指定がない場合は実行日
|
136
242
|
|
137
243
|
* @return \Datetime
|
138
244
|
|
@@ -144,17 +250,17 @@
|
|
144
250
|
|
145
251
|
$date = (is_null($objDate)) ? new \DateTime() : $objDate;
|
146
252
|
|
253
|
+
$interval = new \DateInterval("P1D");
|
254
|
+
|
147
255
|
for ($i = 0; $i < $dateAfter; $i++) {
|
148
256
|
|
149
|
-
$interval = new \DateInterval("P1D");
|
150
|
-
|
151
257
|
$date->add($interval);
|
152
258
|
|
153
259
|
|
154
260
|
|
155
|
-
//
|
261
|
+
// 定休日・祝日のときはカウントしないので、$dateAfterをインクリメント
|
156
|
-
|
262
|
+
|
157
|
-
if (i
|
263
|
+
if (self::isRegularHoliday($date) || self::isHoliday($date)) {
|
158
264
|
|
159
265
|
$dateAfter++;
|
160
266
|
|
1
誤字訂正
test
CHANGED
@@ -78,7 +78,7 @@
|
|
78
78
|
|
79
79
|
|
80
80
|
|
81
|
-
//
|
81
|
+
// 未取得のとき
|
82
82
|
|
83
83
|
$dh = Date_Holidays::factory('Japan', $year, 'ja_JP');
|
84
84
|
|
@@ -152,9 +152,9 @@
|
|
152
152
|
|
153
153
|
|
154
154
|
|
155
|
-
// 土
|
155
|
+
// 土・日曜・祝日のときはカウントしないので、$dateAfterをインクリメント
|
156
|
-
|
156
|
+
|
157
|
-
if (in_array($date->format('w'),
|
157
|
+
if (in_array($date->format('w'), array(0, 6)) || self::isHoliday($date)) {
|
158
158
|
|
159
159
|
$dateAfter++;
|
160
160
|
|