質問: PHPで指定した日付に関して、週の7日間の日付文字列を出力したいと考えています。 「2019-01-07」のような文字列がある場合に、該当の日付に関して、その週の月曜日から日曜日への文字列を7日分全て出力したいと考えております。 また、曜日は月曜日始まりです。 下記は今日に関する日付の出力ですが、「2019-01-07」のような文字列を指定して、その日付に関して行いたいという事です。 よろしくお願いいたします。 ``` ```
回答: 仕様確認中ですが、「指定日から1週間」であれば下記 ``` $targetDate = '2019-01-07'; for($i=0;$i<7;$i++){ echo date("Ymd",strtotime("+{$i} day",strtotime($targetDate)))."\n"; } ``` strtotime()の第1引数でtimeの書式を利用します。 曜日を表示したければwを指定すると日曜日が0として順番に6が土曜日でとれますので、 0=>日 ~ 6=>土 のような配列で変換テーブルを作って照合すると良いです。 コメントを受けて追記 ========== > > 「2019-01-07」は月曜日ですが、その他の曜日の日付も扱います。 > > 指定日付から一週間ではなく、指定した日付が含まれる一週間です。 > > 例えば、「2019-01-11」は金曜ですが、こちらの文字列から、下記の7日間分の文字列を得る事が目的です。 > > 月曜日:2019-01-07 > > 火曜日:2019-01-08 > > 水曜日:2019-01-09 > > 木曜日:2019-01-10 > > 金曜日:2019-01-11 > > 土曜日:2019-01-12 > > 日曜日:2019-01-13 > > > 考え方。 +n day で「その日の何日後」が取得できることは上記で回答したとおり。 date("w") で曜日が数値がとれることも既に回答したとおりです。 「指定日が含まれる月曜日からの1週間」ということは `指定日の曜日から曜日の番号を引いて1を足したものが月曜日`ということになります。 つまり、その日を求めて1週間を求めていけば良い訳ですね。 ※日曜日の場合は0となり+1すると翌週になるので-7しておくなど考慮が必要 以下、実装例 ※もっと簡潔に書けますが、順を追っていけるよう分解しました。 ``` //1週間の設定配列 $weekconfig = [ 0=>"日", 1=>"月", 2=>"火", 3=>"水", 4=>"木", 5=>"金", 6=>"土" ]; //指定日 $targetDate = '2019-01-07'; //指定日の曜日 $targetWeekDay = date("w",strtotime($targetDate)); //日曜日の場合は7を代入して調整 if($targetWeekDay === "0"){ $targetWeekDay = "7"; } //指定日を含む週の月曜日を求める $targetSunday = date("Ymd",strtotime("-".$targetWeekDay." day",strtotime($targetDate))); $targetMonday = date("Ymd",strtotime("+1 day",strtotime($targetSunday))); //月曜日から7日間加算してそれぞれの日付を出力 for($i=0;$i<7;$i++){ $w = date("w",strtotime("+{$i} day",strtotime($targetMonday)));//現在の曜日 echo date($weekconfig[$w]."曜日:Y-m-d",strtotime("+{$i} day",strtotime($targetMonday)))."\n"; } ```