質問編集履歴
3
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -438,4 +438,56 @@
|
|
438
438
|
[is_localtime] =>
|
439
439
|
)
|
440
440
|
OK
|
441
|
+
```
|
442
|
+
|
443
|
+
DateTime::createFromFormat を活かしたスクリプト
|
444
|
+
```
|
445
|
+
<?php
|
446
|
+
|
447
|
+
$dates = [
|
448
|
+
'2017028',
|
449
|
+
'201702',
|
450
|
+
'201720',
|
451
|
+
'20172008',
|
452
|
+
'2017208',
|
453
|
+
'201730',
|
454
|
+
'201740',
|
455
|
+
'201799',
|
456
|
+
'201700',
|
457
|
+
'20170',
|
458
|
+
'2017-02-8',
|
459
|
+
'2017-02',
|
460
|
+
'2017-20',
|
461
|
+
'2017-20-08',
|
462
|
+
'2017-20-8',
|
463
|
+
'2017-30',
|
464
|
+
'2017-40',
|
465
|
+
'2017-99',
|
466
|
+
'2017-00',
|
467
|
+
'2017-0',
|
468
|
+
];
|
469
|
+
function chk_date($date) {
|
470
|
+
$formats = [
|
471
|
+
'Ymd',
|
472
|
+
'Ym',
|
473
|
+
'Y-m-d',
|
474
|
+
'Y-m',
|
475
|
+
];
|
476
|
+
foreach ( $formats as $format ) {
|
477
|
+
$datetime = DateTime::createFromFormat ( $format, $date );
|
478
|
+
$result = DateTime::getLastErrors ();
|
479
|
+
if (! $result ['warning_count'] && ! $result ['error_count']) {
|
480
|
+
echo ", format : $format <br>";
|
481
|
+
echo "DateTime : {$datetime->format('Y-m-d H:i:s')} <br>";
|
482
|
+
return TRUE;
|
483
|
+
}
|
484
|
+
}
|
485
|
+
return FALSE;
|
486
|
+
}
|
487
|
+
|
488
|
+
foreach ( $dates as $date ) {
|
489
|
+
echo "date : $date";
|
490
|
+
echo chk_date ( $date ) ? 'OK' : 'NG';
|
491
|
+
echo '<br><br>';
|
492
|
+
}
|
441
493
|
```
|
2
追記修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
DateTime 使った、日付の確認スクリプトを作成したのですが、意図した月判定が出来ません。
|
2
2
|
|
3
3
|
現象は
|
4
|
-
|
4
|
+
- Ym や Y-m の判定のときのみ起こるようである。d を含むと正常(一般的な範囲の月判定)に動作する。
|
5
|
-
|
5
|
+
- 0 や 99 といった月判定されてはおかしいようなものが月判定される。
|
6
|
-
・d を含むと正常(一般的な範囲の月判定)に動作する。
|
7
6
|
|
8
7
|
[date](http://php.net/manual/ja/function.date.php)
|
9
8
|
m 月。数字。先頭にゼロをつける。 01 から 12
|
@@ -26,11 +25,23 @@
|
|
26
25
|
'201799',
|
27
26
|
'201700',
|
28
27
|
'20170',
|
28
|
+
'2017-02-8',
|
29
|
+
'2017-02',
|
30
|
+
'2017-20',
|
31
|
+
'2017-20-08',
|
32
|
+
'2017-20-8',
|
33
|
+
'2017-30',
|
34
|
+
'2017-40',
|
35
|
+
'2017-99',
|
36
|
+
'2017-00',
|
37
|
+
'2017-0',
|
29
38
|
];
|
30
39
|
function chk_date($date) {
|
31
40
|
$formats = [
|
32
41
|
'Ymd',
|
33
42
|
'Ym',
|
43
|
+
'Y-m-d',
|
44
|
+
'Y-m',
|
34
45
|
];
|
35
46
|
foreach ( $formats as $format ) {
|
36
47
|
DateTime::createFromFormat ( $format, $date );
|
@@ -51,6 +62,7 @@
|
|
51
62
|
echo chk_date ( $date ) ? 'OK' : 'NG';
|
52
63
|
echo '<br>';
|
53
64
|
}
|
65
|
+
|
54
66
|
```
|
55
67
|
|
56
68
|
```
|
@@ -240,4 +252,190 @@
|
|
240
252
|
[is_localtime] =>
|
241
253
|
)
|
242
254
|
OK
|
255
|
+
2017-02-8:
|
256
|
+
Array
|
257
|
+
(
|
258
|
+
[year] => 2017
|
259
|
+
[month] => 2
|
260
|
+
[day] => 8
|
261
|
+
[hour] =>
|
262
|
+
[minute] =>
|
263
|
+
[second] =>
|
264
|
+
[fraction] =>
|
265
|
+
[warning_count] => 0
|
266
|
+
[warnings] => Array
|
267
|
+
(
|
268
|
+
)
|
269
|
+
|
270
|
+
[error_count] => 0
|
271
|
+
[errors] => Array
|
272
|
+
(
|
273
|
+
)
|
274
|
+
|
275
|
+
[is_localtime] =>
|
276
|
+
)
|
277
|
+
OK
|
278
|
+
2017-02:
|
279
|
+
Array
|
280
|
+
(
|
281
|
+
[year] => 2017
|
282
|
+
[month] => 2
|
283
|
+
[day] =>
|
284
|
+
[hour] =>
|
285
|
+
[minute] =>
|
286
|
+
[second] =>
|
287
|
+
[fraction] =>
|
288
|
+
[warning_count] => 0
|
289
|
+
[warnings] => Array
|
290
|
+
(
|
291
|
+
)
|
292
|
+
|
293
|
+
[error_count] => 0
|
294
|
+
[errors] => Array
|
295
|
+
(
|
296
|
+
)
|
297
|
+
|
298
|
+
[is_localtime] =>
|
299
|
+
)
|
300
|
+
OK
|
301
|
+
2017-20:
|
302
|
+
Array
|
303
|
+
(
|
304
|
+
[year] => 2017
|
305
|
+
[month] => 20
|
306
|
+
[day] =>
|
307
|
+
[hour] =>
|
308
|
+
[minute] =>
|
309
|
+
[second] =>
|
310
|
+
[fraction] =>
|
311
|
+
[warning_count] => 0
|
312
|
+
[warnings] => Array
|
313
|
+
(
|
314
|
+
)
|
315
|
+
|
316
|
+
[error_count] => 0
|
317
|
+
[errors] => Array
|
318
|
+
(
|
319
|
+
)
|
320
|
+
|
321
|
+
[is_localtime] =>
|
322
|
+
)
|
323
|
+
OK
|
324
|
+
2017-20-08:NG
|
325
|
+
2017-20-8:NG
|
326
|
+
2017-30:
|
327
|
+
Array
|
328
|
+
(
|
329
|
+
[year] => 2017
|
330
|
+
[month] => 30
|
331
|
+
[day] =>
|
332
|
+
[hour] =>
|
333
|
+
[minute] =>
|
334
|
+
[second] =>
|
335
|
+
[fraction] =>
|
336
|
+
[warning_count] => 0
|
337
|
+
[warnings] => Array
|
338
|
+
(
|
339
|
+
)
|
340
|
+
|
341
|
+
[error_count] => 0
|
342
|
+
[errors] => Array
|
343
|
+
(
|
344
|
+
)
|
345
|
+
|
346
|
+
[is_localtime] =>
|
347
|
+
)
|
348
|
+
OK
|
349
|
+
2017-40:
|
350
|
+
Array
|
351
|
+
(
|
352
|
+
[year] => 2017
|
353
|
+
[month] => 40
|
354
|
+
[day] =>
|
355
|
+
[hour] =>
|
356
|
+
[minute] =>
|
357
|
+
[second] =>
|
358
|
+
[fraction] =>
|
359
|
+
[warning_count] => 0
|
360
|
+
[warnings] => Array
|
361
|
+
(
|
362
|
+
)
|
363
|
+
|
364
|
+
[error_count] => 0
|
365
|
+
[errors] => Array
|
366
|
+
(
|
367
|
+
)
|
368
|
+
|
369
|
+
[is_localtime] =>
|
370
|
+
)
|
371
|
+
OK
|
372
|
+
2017-99:
|
373
|
+
Array
|
374
|
+
(
|
375
|
+
[year] => 2017
|
376
|
+
[month] => 99
|
377
|
+
[day] =>
|
378
|
+
[hour] =>
|
379
|
+
[minute] =>
|
380
|
+
[second] =>
|
381
|
+
[fraction] =>
|
382
|
+
[warning_count] => 0
|
383
|
+
[warnings] => Array
|
384
|
+
(
|
385
|
+
)
|
386
|
+
|
387
|
+
[error_count] => 0
|
388
|
+
[errors] => Array
|
389
|
+
(
|
390
|
+
)
|
391
|
+
|
392
|
+
[is_localtime] =>
|
393
|
+
)
|
394
|
+
OK
|
395
|
+
2017-00:
|
396
|
+
Array
|
397
|
+
(
|
398
|
+
[year] => 2017
|
399
|
+
[month] => 0
|
400
|
+
[day] =>
|
401
|
+
[hour] =>
|
402
|
+
[minute] =>
|
403
|
+
[second] =>
|
404
|
+
[fraction] =>
|
405
|
+
[warning_count] => 0
|
406
|
+
[warnings] => Array
|
407
|
+
(
|
408
|
+
)
|
409
|
+
|
410
|
+
[error_count] => 0
|
411
|
+
[errors] => Array
|
412
|
+
(
|
413
|
+
)
|
414
|
+
|
415
|
+
[is_localtime] =>
|
416
|
+
)
|
417
|
+
OK
|
418
|
+
2017-0:
|
419
|
+
Array
|
420
|
+
(
|
421
|
+
[year] => 2017
|
422
|
+
[month] => 0
|
423
|
+
[day] =>
|
424
|
+
[hour] =>
|
425
|
+
[minute] =>
|
426
|
+
[second] =>
|
427
|
+
[fraction] =>
|
428
|
+
[warning_count] => 0
|
429
|
+
[warnings] => Array
|
430
|
+
(
|
431
|
+
)
|
432
|
+
|
433
|
+
[error_count] => 0
|
434
|
+
[errors] => Array
|
435
|
+
(
|
436
|
+
)
|
437
|
+
|
438
|
+
[is_localtime] =>
|
439
|
+
)
|
440
|
+
OK
|
243
441
|
```
|
1
修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
DateTime
|
1
|
+
DateTime クラスの月判定に関して
|
body
CHANGED
File without changes
|