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

回答編集履歴

3

コード修正(preg_match1回目に失敗したら、2回目を実施)

2017/02/17 06:39

投稿

退会済みユーザー
answer CHANGED
@@ -5,18 +5,22 @@
5
5
  // 年月日の各パーツを分割する
6
6
  preg_match( "/([0-9]*)年([0-9]*)月([0-9]*)日/", $date_str, $data );
7
7
 
8
- if( Count( $data ) == 4 ) {
8
+ if( empty($data) ) {
9
- // 先頭0埋めでYYYYMMDD形式の日付文字列に変換する
10
- $outStr = sprintf( "%04.4d/%02.2d/%02.2d", $data[1], $data[2], $data[3] );
9
+ preg_match( "/([0-9]*)年([0-9]*)月/", $date_str, $data );
11
- }
10
+ }
12
- else if( Count( $data ) == 3 ) {
13
- // 先頭0埋めでYYYYMM形式の日付文字列に変換する
14
- $outStr = sprintf( "%04.4d/%02.2d/01", $data[1], $data[2] );
15
- }
16
- else {
17
- $outStr = '';
18
- }
19
11
 
12
+ if( Count( $data ) == 4 ) {
13
+ // 先頭0埋めでYYYYMMDD形式の日付文字列に変換する
14
+ $outStr = sprintf( "%04.4d/%02.2d/%02.2d", $data[1], $data[2], $data[3] );
15
+ }
16
+ else if( Count( $data ) == 3 ) {
17
+ // 先頭0埋めでYYYYMM形式の日付文字列に変換する
18
+ $outStr = sprintf( "%04.4d/%02.2d/01", $data[1], $data[2] );
19
+ }
20
+ else {
21
+ $outStr = '';
22
+ }
23
+
20
24
  return strtotime($outStr);
21
25
  }
22
26
  ?>
@@ -28,24 +32,24 @@
28
32
  $normalize_time = normalizeTime($event_date1);
29
33
 
30
34
  if( $normalize_time != false ) : ?>
31
- <p class="year">
35
+ <p class="year">
32
- <?php echo date_i18n('Y', $normalize_time); ?>
36
+ <?php echo date_i18n('Y', $normalize_time); ?>
33
-
37
+
34
- </p>
38
+ </p>
35
39
 
36
- <p class="month">
40
+ <p class="month">
37
- <?php echo date_i18n('m', $normalize_time); ?>
41
+ <?php echo date_i18n('m', $normalize_time); ?>
38
-
42
+
39
- </p>
43
+ </p>
40
44
 
41
- // $event_date1に'日'という文字が含まれているか
45
+ <?php // $event_date1に'日'という文字が含まれているか ?>
42
- <?php if(strpos($event_date1,'日') !== false) : ?>
46
+ <?php if(strpos($event_date1,'日') !== false) : ?>
43
- <p class="date">
47
+ <p class="date">
44
- <?php echo date_i18n('d', $normalize_time); ?>
48
+ <?php echo date_i18n('d', $normalize_time); ?>
45
-
49
+
46
- </p>
50
+ </p>
47
- <?php endif; ?>
51
+ <?php endif; ?>
48
52
  <?php else : ?>
49
- <p>日付の形式が無効です</p>
53
+ <p>日付の形式が無効です</p>
50
54
  <?php endif; ?>
51
55
  ```

2

コード修正(年月形式をstrtotime\(\)に渡すとエラーになるので、日付を付加)

2017/02/17 06:39

投稿

退会済みユーザー
answer CHANGED
@@ -11,7 +11,7 @@
11
11
  }
12
12
  else if( Count( $data ) == 3 ) {
13
13
  // 先頭0埋めでYYYYMM形式の日付文字列に変換する
14
- $outStr = sprintf( "%04.4d/%02.2d", $data[1], $data[2] );
14
+ $outStr = sprintf( "%04.4d/%02.2d/01", $data[1], $data[2] );
15
15
  }
16
16
  else {
17
17
  $outStr = '';

1

コードの誤記訂正(if文のカッコ開くが多かった)

2017/02/16 11:31

投稿

退会済みユーザー
answer CHANGED
@@ -5,11 +5,11 @@
5
5
  // 年月日の各パーツを分割する
6
6
  preg_match( "/([0-9]*)年([0-9]*)月([0-9]*)日/", $date_str, $data );
7
7
 
8
- if( ( Count( $data ) == 4 ) {
8
+ if( Count( $data ) == 4 ) {
9
9
  // 先頭0埋めでYYYYMMDD形式の日付文字列に変換する
10
10
  $outStr = sprintf( "%04.4d/%02.2d/%02.2d", $data[1], $data[2], $data[3] );
11
11
  }
12
- else if( ( Count( $data ) == 3 ) {
12
+ else if( Count( $data ) == 3 ) {
13
13
  // 先頭0埋めでYYYYMM形式の日付文字列に変換する
14
14
  $outStr = sprintf( "%04.4d/%02.2d", $data[1], $data[2] );
15
15
  }