teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

修正

2017/02/17 07:52

投稿

退会済みユーザー
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

追記修正

2017/02/17 07:52

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,9 +1,8 @@
1
1
  DateTime 使った、日付の確認スクリプトを作成したのですが、意図した月判定が出来ません。
2
2
 
3
3
  現象は
4
- Ym の判定のときのみ起こるようである。
4
+ - Ym や Y-m の判定のときのみ起こるようである。d を含むと正常(一般的な範囲の月判定)に動作する。
5
- 0 や 99 といった月判定されてはおかしいようなものが月判定される。
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

修正

2017/02/17 01:12

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- DateTime 関数の月判定に関して
1
+ DateTime クラスの月判定に関して
body CHANGED
File without changes