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

回答編集履歴

2

バグの修正

2017/04/04 05:52

投稿

kunai
kunai

スコア5405

answer CHANGED
@@ -14,7 +14,6 @@
14
14
  . '<td>' . $date->format('Y-m-d') . '</td>' . "\n"
15
15
  . '<td>' . $array_week[$date->format('w')] . '</td>' . "\n"
16
16
  . '</tr>' . "\n";
17
- $date->modify('+1 days');
18
17
  }
19
18
 
20
19
  echo '</table>' . "\n";

1

ソースコードの単純化

2017/04/04 05:52

投稿

kunai
kunai

スコア5405

answer CHANGED
@@ -4,23 +4,19 @@
4
4
  ```PHP
5
5
  <?php
6
6
  if (isset($_POST['btn'])) {
7
- //今年の1月1日でDatetimeをインスタンス化
7
+ //最大の1月1日でDatetimeをインスタンス化
8
- $date = new Datetime(date('y').'-1-1');
9
- $maxDate = new Datetime(date('y').'-1-1');
8
+ $maxDate = new Datetime(((int)date('y') + $_POST['years']).'-1-1');
10
9
 
11
- //取得する最大年を追加
12
- $maxDate->modify('+'.$_POST['years'].' years');
13
-
14
10
  echo '<table border="1">' . "\n";
15
- //日表示
11
+ //最大(n年後1月1日)になったらループを抜ける
16
- do {
12
+ for($date = new Datetime(date('y').'-1-1'); $date < $maxDate; $date->modify('+1 days')) {
17
13
  echo '<tr>' . "\n"
18
14
  . '<td>' . $date->format('Y-m-d') . '</td>' . "\n"
19
15
  . '<td>' . $array_week[$date->format('w')] . '</td>' . "\n"
20
16
  . '</tr>' . "\n";
21
17
  $date->modify('+1 days');
22
- } while($date < $maxDate);
18
+ }
23
- //最大日(n年後の1月1日)になったらループを抜ける
19
+
24
20
  echo '</table>' . "\n";
25
21
  }
26
22
  ?>