指定年月日の週初めと終わりの日付を取得する方法


読むのが面倒な人向けまとめ

  1. 1・$weekNo= date(‘w’, strtotime(date(‘Y/m/d’))); みたいな感じで指定日の曜日を取得
  2. 2・date(‘Y/m/d’, strtotime(“-{$weekNo} day”, strtotime(date(‘Y/m/d’)))); で週初めゲット
  3. 3・週終わりは 6 – $weekNo した値で2と同じことやればゲット

あまり使う機会はないかもしれませんが、PHPで指定年月日の週初めと終わりの日付を取得する方法。

指定年月日の週に登録されてる予定を取得したい時とかに使うかも?

やり方は結構単純で、指定年月日の曜日を取得して、それを元に初めの日と終わりの日を取得するという流れになります。

最後にコピペ用コードは貼りますが、簡単な説明を踏まえて書いていきます。

指定日は、「2018年01月01日」で説明します。


週初めの年月日を取得する

まずは、指定年月日の曜日(0が日曜日で6が土曜日の数値)を取得します。

$weekNo = date('w', strtotime('2018/01/01'));

取得した曜日分の値を指定年月日から引いたものが初めの日となります。
2018/01/01は月曜日なので、1 – 1 = 0 になるって感じです。

$startDate = date('Y/m/d', strtotime("-{$weekNo} day", strtotime('2018/01/01')));

週終わりの年月日を取得する

次に週終わりの年月日の取得です。

指定年月日の曜日から6(土曜日の値)を引いたものを指定年月日に足すと終わりの日になります。
2018/01/01は月曜日なので、6 – 1 = 5 で5日後が終わりの日になるって原理です。

$daysLeft          = 6 - $weekNo;
$result['endDate'] = date('Y/m/d', strtotime("+{$daysLeft} day", strtotime('2018/01/01')));

まとめ

処理としては以上です。
そんなに使う機会はないかもしれませんが、一応関数として使いまわせるようにしておきます。

function getWeekStartAndEndDate($checkData)
{
  $result = array(
    'startDate' => null,
    'endDate'   => null,
  );

  $weekNo = date('w', strtotime($checkData));

  // 週の初めの年月日を取得
  $result['startDate'] = date('Y/m/d', strtotime("-{$weekNo} day", strtotime($checkData)));

  // 週の最後の年月日を取得
  $daysLeft          = 6 - $weekNo;
  $result['endDate'] = date('Y/m/d', strtotime("+{$daysLeft} day", strtotime($checkData)));

  return $result;
}

使い方は以下のようになります。

// 今日を指定年月日にする場合
$nowWeekArray = getWeekStartAndEndDate(date('Y/m/d'));

// 好きな年月日を指定する場合
$designateWeekArray = getWeekStartAndEndDate('2018/01/01');