9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPで今日の日時から過去直近のX曜日の日時を取得する

Last updated at Posted at 2019-01-22

こんにちは!
今回は、PHPで過去の直近の任意曜日は何日だったかを取得する方法を紹介します。
例えば、1/21(月) ~ 1/28(月) の期間で過去の直近の月曜日を取得したいと考えると、

  • 1/21(月)ならその日が月曜なので1/21(月)
  • 1/22(火) ~ 1/27(日)なら1/21(月)
  • 1/28(月)ならその日が月曜なので1/28(月)

をそれぞれ取得できるといった具合です。
例えば、毎週X曜日ごとに切り替わるシステム(今週のMVPを決めるよ~とかw)などを作る際に、
最近最後のN曜日って何日だったかなーって時に使うイメージです。

サンプルコード

例として、今日の日時から過去直近の月曜は何日だったかを求めてみます。

// 今日は2019/01/21 月曜日だったと仮定します
$now = new DateTime();

$w = date('w', $now->getTimestamp());
$diff = ($w + 6) % 7;

// 今日の日時から$diff日前に遡る
$ymd = date('Y/m/d', strtotime("-{$diff} day", $now->getTimestamp()));

print_r($ymd);

// 結果: 2019/01/21

解説

date('w', $timestamp)では、
$timestampで与えられた日時に対して、その日が日曜日なら0、月曜なら1、火曜なら2...土曜なら6といった数値を返してくれます。

今回の例では、直近の月曜日を取得したかったので月曜なら0日前、火曜なら1日前、...日曜なら6日前に遡るように$diffの計算時に、+Nする値を調整($w=1なので$wに+6して曜日数(=7)で割った余りが0になるように)しています。

したがって, 仮に直近の火曜日を取得したいよーという場合は、$diffを求める際に+6している部分を+5、
水曜なら+4、...日曜なら+0と調整すると直近の任意の曜日の日付を取得することができます。

ひとこと

日付はなんかややこしいよね(´・ω・`)

9
4
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?