回答編集履歴

1

流れだけ書いていた部分をPHPのコードにしてみました。

2016/07/01 10:19

投稿

kopio
kopio

スコア487

test CHANGED
@@ -4,36 +4,74 @@
4
4
 
5
5
 
6
6
 
7
+ 誰も見てないだろうけど、せっかくなので調べてコードにしてみました。
8
+
7
- だれかコードにし試してくれないかなあ。
9
+ 1年の日曜日の数が間違ったのをこっそり修正
8
10
 
9
11
 
10
12
 
13
+ とりあえず動いたけど、ifとかforのスコープ内で作った変数って外で使っていいのかな?
14
+
15
+
16
+
11
- ```
17
+ ```PHP
18
+
19
+ <?php
12
20
 
13
21
  // 1月1日の曜日を求める
14
22
 
15
23
  // 曜日 = 0:日曜日~6:土曜日
16
24
 
25
+ $year = 2016;
17
26
 
18
-
19
- // 最初の日曜日は何日目か
20
-
21
- // 何日目 = (7 - 曜日) % 7 + 1
27
+ $week = date("w", mktime(0, 0, 0, 1, 1, $year));
22
28
 
23
29
 
24
30
 
25
31
  // 1年間の日曜日の数
26
32
 
27
- // floor((1年の数 - 最初の日曜日は何日目か) / 7)
33
+ // うるう年だと1/1が日曜か土曜だと53回、それ以外52回
28
34
 
29
- // うるう年だと1/1が日曜か土曜日だと52回、それ以外は51
35
+ // 年だと1/1が日曜だと53回、それ以外は52
30
36
 
37
+ if (($year % 4 == 0 && $year % 100 != 0) || ($year % 400 == 0)) {
38
+
31
- // 平年だと1/1が日曜だと52回、それ以外は51回
39
+ $weeks = [53, 52, 52, 52, 52, 52, 53];
40
+
41
+ } else {
42
+
43
+ $weeks = [53, 52, 52, 52, 52, 52, 52];
44
+
45
+ }
46
+
47
+ $sundayTimes = $weeks[$week];
32
48
 
33
49
 
34
50
 
51
+ // 年の最初の日曜日は何日目か
52
+
53
+ $firstSunday = [1, 7, 6, 5, 4, 3, 2];
54
+
35
- // 最初の日曜日から(1年間の日曜日の数 - 1)回、7日を足す
55
+ // 年の最初の日曜日から(1年間の日曜日の数 - 1)回、7日を足す
56
+
57
+ $sunday = mktime(0, 0, 0, 1, $firstSunday[$week], $year);
58
+
59
+ for ($idx = 0; $idx < $sundayTimes; $idx++) {
60
+
61
+ // とりあえず配列に入れておく
62
+
63
+ $sundays[$idx] = date("y-m-d", $sunday);
64
+
65
+ $sunday += 604800; // 7日 * 24時間 * 60分 * 60秒
66
+
67
+ }
36
68
 
37
69
 
38
70
 
71
+ // この関数なに?デバッグ用?
72
+
73
+ var_dump($sundays);
74
+
75
+ ?>
76
+
39
77
  ```