質問編集履歴

3

修正

2017/02/17 07:52

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -879,3 +879,107 @@
879
879
  OK
880
880
 
881
881
  ```
882
+
883
+
884
+
885
+ DateTime::createFromFormat を活かしたスクリプト
886
+
887
+ ```
888
+
889
+ <?php
890
+
891
+
892
+
893
+ $dates = [
894
+
895
+ '2017028',
896
+
897
+ '201702',
898
+
899
+ '201720',
900
+
901
+ '20172008',
902
+
903
+ '2017208',
904
+
905
+ '201730',
906
+
907
+ '201740',
908
+
909
+ '201799',
910
+
911
+ '201700',
912
+
913
+ '20170',
914
+
915
+ '2017-02-8',
916
+
917
+ '2017-02',
918
+
919
+ '2017-20',
920
+
921
+ '2017-20-08',
922
+
923
+ '2017-20-8',
924
+
925
+ '2017-30',
926
+
927
+ '2017-40',
928
+
929
+ '2017-99',
930
+
931
+ '2017-00',
932
+
933
+ '2017-0',
934
+
935
+ ];
936
+
937
+ function chk_date($date) {
938
+
939
+ $formats = [
940
+
941
+ 'Ymd',
942
+
943
+ 'Ym',
944
+
945
+ 'Y-m-d',
946
+
947
+ 'Y-m',
948
+
949
+ ];
950
+
951
+ foreach ( $formats as $format ) {
952
+
953
+ $datetime = DateTime::createFromFormat ( $format, $date );
954
+
955
+ $result = DateTime::getLastErrors ();
956
+
957
+ if (! $result ['warning_count'] && ! $result ['error_count']) {
958
+
959
+ echo ", format : $format <br>";
960
+
961
+ echo "DateTime : {$datetime->format('Y-m-d H:i:s')} <br>";
962
+
963
+ return TRUE;
964
+
965
+ }
966
+
967
+ }
968
+
969
+ return FALSE;
970
+
971
+ }
972
+
973
+
974
+
975
+ foreach ( $dates as $date ) {
976
+
977
+ echo "date : $date";
978
+
979
+ echo chk_date ( $date ) ? 'OK' : 'NG';
980
+
981
+ echo '<br><br>';
982
+
983
+ }
984
+
985
+ ```

2

追記修正

2017/02/17 07:52

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -4,11 +4,9 @@
4
4
 
5
5
  現象は
6
6
 
7
- Ym の判定のときのみ起こるようである。
7
+ - Ym や Y-m の判定のときのみ起こるようである。d を含むと正常(一般的な範囲の月判定)に動作する。
8
-
8
+
9
- 0 や 99 といった月判定されてはおかしいようなものが月判定される。
9
+ - 0 や 99 といった月判定されてはおかしいようなものが月判定される。
10
-
11
- ・d を含むと正常(一般的な範囲の月判定)に動作する。
12
10
 
13
11
 
14
12
 
@@ -54,6 +52,26 @@
54
52
 
55
53
  '20170',
56
54
 
55
+ '2017-02-8',
56
+
57
+ '2017-02',
58
+
59
+ '2017-20',
60
+
61
+ '2017-20-08',
62
+
63
+ '2017-20-8',
64
+
65
+ '2017-30',
66
+
67
+ '2017-40',
68
+
69
+ '2017-99',
70
+
71
+ '2017-00',
72
+
73
+ '2017-0',
74
+
57
75
  ];
58
76
 
59
77
  function chk_date($date) {
@@ -64,6 +82,10 @@
64
82
 
65
83
  'Ym',
66
84
 
85
+ 'Y-m-d',
86
+
87
+ 'Y-m',
88
+
67
89
  ];
68
90
 
69
91
  foreach ( $formats as $format ) {
@@ -104,6 +126,8 @@
104
126
 
105
127
  }
106
128
 
129
+
130
+
107
131
  ```
108
132
 
109
133
 
@@ -482,4 +506,376 @@
482
506
 
483
507
  OK
484
508
 
509
+ 2017-02-8:
510
+
511
+ Array
512
+
513
+ (
514
+
515
+ [year] => 2017
516
+
517
+ [month] => 2
518
+
519
+ [day] => 8
520
+
521
+ [hour] =>
522
+
523
+ [minute] =>
524
+
525
+ [second] =>
526
+
527
+ [fraction] =>
528
+
529
+ [warning_count] => 0
530
+
531
+ [warnings] => Array
532
+
533
+ (
534
+
535
+ )
536
+
537
+
538
+
539
+ [error_count] => 0
540
+
541
+ [errors] => Array
542
+
543
+ (
544
+
545
+ )
546
+
547
+
548
+
549
+ [is_localtime] =>
550
+
551
+ )
552
+
553
+ OK
554
+
555
+ 2017-02:
556
+
557
+ Array
558
+
559
+ (
560
+
561
+ [year] => 2017
562
+
563
+ [month] => 2
564
+
565
+ [day] =>
566
+
567
+ [hour] =>
568
+
569
+ [minute] =>
570
+
571
+ [second] =>
572
+
573
+ [fraction] =>
574
+
575
+ [warning_count] => 0
576
+
577
+ [warnings] => Array
578
+
579
+ (
580
+
581
+ )
582
+
583
+
584
+
585
+ [error_count] => 0
586
+
587
+ [errors] => Array
588
+
589
+ (
590
+
591
+ )
592
+
593
+
594
+
595
+ [is_localtime] =>
596
+
597
+ )
598
+
599
+ OK
600
+
601
+ 2017-20:
602
+
603
+ Array
604
+
605
+ (
606
+
607
+ [year] => 2017
608
+
609
+ [month] => 20
610
+
611
+ [day] =>
612
+
613
+ [hour] =>
614
+
615
+ [minute] =>
616
+
617
+ [second] =>
618
+
619
+ [fraction] =>
620
+
621
+ [warning_count] => 0
622
+
623
+ [warnings] => Array
624
+
625
+ (
626
+
627
+ )
628
+
629
+
630
+
631
+ [error_count] => 0
632
+
633
+ [errors] => Array
634
+
635
+ (
636
+
637
+ )
638
+
639
+
640
+
641
+ [is_localtime] =>
642
+
643
+ )
644
+
645
+ OK
646
+
647
+ 2017-20-08:NG
648
+
649
+ 2017-20-8:NG
650
+
651
+ 2017-30:
652
+
653
+ Array
654
+
655
+ (
656
+
657
+ [year] => 2017
658
+
659
+ [month] => 30
660
+
661
+ [day] =>
662
+
663
+ [hour] =>
664
+
665
+ [minute] =>
666
+
667
+ [second] =>
668
+
669
+ [fraction] =>
670
+
671
+ [warning_count] => 0
672
+
673
+ [warnings] => Array
674
+
675
+ (
676
+
677
+ )
678
+
679
+
680
+
681
+ [error_count] => 0
682
+
683
+ [errors] => Array
684
+
685
+ (
686
+
687
+ )
688
+
689
+
690
+
691
+ [is_localtime] =>
692
+
693
+ )
694
+
695
+ OK
696
+
697
+ 2017-40:
698
+
699
+ Array
700
+
701
+ (
702
+
703
+ [year] => 2017
704
+
705
+ [month] => 40
706
+
707
+ [day] =>
708
+
709
+ [hour] =>
710
+
711
+ [minute] =>
712
+
713
+ [second] =>
714
+
715
+ [fraction] =>
716
+
717
+ [warning_count] => 0
718
+
719
+ [warnings] => Array
720
+
721
+ (
722
+
723
+ )
724
+
725
+
726
+
727
+ [error_count] => 0
728
+
729
+ [errors] => Array
730
+
731
+ (
732
+
733
+ )
734
+
735
+
736
+
737
+ [is_localtime] =>
738
+
739
+ )
740
+
741
+ OK
742
+
743
+ 2017-99:
744
+
745
+ Array
746
+
747
+ (
748
+
749
+ [year] => 2017
750
+
751
+ [month] => 99
752
+
753
+ [day] =>
754
+
755
+ [hour] =>
756
+
757
+ [minute] =>
758
+
759
+ [second] =>
760
+
761
+ [fraction] =>
762
+
763
+ [warning_count] => 0
764
+
765
+ [warnings] => Array
766
+
767
+ (
768
+
769
+ )
770
+
771
+
772
+
773
+ [error_count] => 0
774
+
775
+ [errors] => Array
776
+
777
+ (
778
+
779
+ )
780
+
781
+
782
+
783
+ [is_localtime] =>
784
+
785
+ )
786
+
787
+ OK
788
+
789
+ 2017-00:
790
+
791
+ Array
792
+
793
+ (
794
+
795
+ [year] => 2017
796
+
797
+ [month] => 0
798
+
799
+ [day] =>
800
+
801
+ [hour] =>
802
+
803
+ [minute] =>
804
+
805
+ [second] =>
806
+
807
+ [fraction] =>
808
+
809
+ [warning_count] => 0
810
+
811
+ [warnings] => Array
812
+
813
+ (
814
+
815
+ )
816
+
817
+
818
+
819
+ [error_count] => 0
820
+
821
+ [errors] => Array
822
+
823
+ (
824
+
825
+ )
826
+
827
+
828
+
829
+ [is_localtime] =>
830
+
831
+ )
832
+
833
+ OK
834
+
835
+ 2017-0:
836
+
837
+ Array
838
+
839
+ (
840
+
841
+ [year] => 2017
842
+
843
+ [month] => 0
844
+
845
+ [day] =>
846
+
847
+ [hour] =>
848
+
849
+ [minute] =>
850
+
851
+ [second] =>
852
+
853
+ [fraction] =>
854
+
855
+ [warning_count] => 0
856
+
857
+ [warnings] => Array
858
+
859
+ (
860
+
861
+ )
862
+
863
+
864
+
865
+ [error_count] => 0
866
+
867
+ [errors] => Array
868
+
869
+ (
870
+
871
+ )
872
+
873
+
874
+
875
+ [is_localtime] =>
876
+
877
+ )
878
+
879
+ OK
880
+
485
881
  ```

1

修正

2017/02/17 01:12

投稿

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