回答編集履歴

2

厳密比較に修正

2019/01/18 02:30

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -72,6 +72,8 @@
72
72
 
73
73
  ```php
74
74
 
75
+ //1週間の設定配列
76
+
75
77
  $weekconfig = [
76
78
 
77
79
  0=>"日",
@@ -90,6 +92,10 @@
90
92
 
91
93
  ];
92
94
 
95
+
96
+
97
+ //指定日
98
+
93
99
  $targetDate = '2019-01-07';
94
100
 
95
101
  //指定日の曜日
@@ -98,9 +104,9 @@
98
104
 
99
105
  //日曜日の場合は7を代入して調整
100
106
 
101
- if($targetWeekDay == 0){
107
+ if($targetWeekDay === "0"){
102
108
 
103
- $targetWeekDay=7;
109
+ $targetWeekDay = "7";
104
110
 
105
111
  }
106
112
 
@@ -112,9 +118,11 @@
112
118
 
113
119
 
114
120
 
121
+ //月曜日から7日間加算してそれぞれの日付を出力
122
+
115
123
  for($i=0;$i<7;$i++){
116
124
 
117
- $w = date("w",strtotime("+{$i} day",strtotime($targetMonday)));
125
+ $w = date("w",strtotime("+{$i} day",strtotime($targetMonday)));//現在の曜日
118
126
 
119
127
  echo date($weekconfig[$w]."曜日:Y-m-d",strtotime("+{$i} day",strtotime($targetMonday)))."\n";
120
128
 

1

修正

2019/01/18 02:30

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -19,3 +19,105 @@
19
19
  曜日を表示したければwを指定すると日曜日が0として順番に6が土曜日でとれますので、
20
20
 
21
21
  0=>日 ~ 6=>土 のような配列で変換テーブルを作って照合すると良いです。
22
+
23
+
24
+
25
+ # コメントを受けて追記
26
+
27
+
28
+
29
+ > 「2019-01-07」は月曜日ですが、その他の曜日の日付も扱います。
30
+
31
+ 指定日付から一週間ではなく、指定した日付が含まれる一週間です。
32
+
33
+ 例えば、「2019-01-11」は金曜ですが、こちらの文字列から、下記の7日間分の文字列を得る事が目的です。
34
+
35
+ 月曜日:2019-01-07
36
+
37
+ 火曜日:2019-01-08
38
+
39
+ 水曜日:2019-01-09
40
+
41
+ 木曜日:2019-01-10
42
+
43
+ 金曜日:2019-01-11
44
+
45
+ 土曜日:2019-01-12
46
+
47
+ 日曜日:2019-01-13
48
+
49
+
50
+
51
+ 考え方。
52
+
53
+ +n day で「その日の何日後」が取得できることは上記で回答したとおり。
54
+
55
+ date("w") で曜日が数値がとれることも既に回答したとおりです。
56
+
57
+
58
+
59
+ 「指定日が含まれる月曜日からの1週間」ということは
60
+
61
+ `指定日の曜日から曜日の番号を引いて1を足したものが月曜日`ということになります。
62
+
63
+ つまり、その日を求めて1週間を求めていけば良い訳ですね。
64
+
65
+ ※日曜日の場合は0となり+1すると翌週になるので-7しておくなど考慮が必要
66
+
67
+
68
+
69
+ 以下、実装例
70
+
71
+ ※もっと簡潔に書けますが、順を追っていけるよう分解しました。
72
+
73
+ ```php
74
+
75
+ $weekconfig = [
76
+
77
+ 0=>"日",
78
+
79
+ 1=>"月",
80
+
81
+ 2=>"火",
82
+
83
+ 3=>"水",
84
+
85
+ 4=>"木",
86
+
87
+ 5=>"金",
88
+
89
+ 6=>"土"
90
+
91
+ ];
92
+
93
+ $targetDate = '2019-01-07';
94
+
95
+ //指定日の曜日
96
+
97
+ $targetWeekDay = date("w",strtotime($targetDate));
98
+
99
+ //日曜日の場合は7を代入して調整
100
+
101
+ if($targetWeekDay == 0){
102
+
103
+ $targetWeekDay=7;
104
+
105
+ }
106
+
107
+ //指定日を含む週の月曜日を求める
108
+
109
+ $targetSunday = date("Ymd",strtotime("-".$targetWeekDay." day",strtotime($targetDate)));
110
+
111
+ $targetMonday = date("Ymd",strtotime("+1 day",strtotime($targetSunday)));
112
+
113
+
114
+
115
+ for($i=0;$i<7;$i++){
116
+
117
+ $w = date("w",strtotime("+{$i} day",strtotime($targetMonday)));
118
+
119
+ echo date($weekconfig[$w]."曜日:Y-m-d",strtotime("+{$i} day",strtotime($targetMonday)))."\n";
120
+
121
+ }
122
+
123
+ ```