[PHP]対象の日付が月の何週目なのかを調べる

2019年5月24日

はじめに

 

カレンダーのシステムを作ることになったので、日付けを週ごとに並べる為のグループ分けするロジックが必要になりました。

PHPの関数には、対象の日付が月の何周目なのか調べるものがありません。

仕方ないので自作することにしました。

 

環境

PHP: 7.1

 

導入手順

以下のロジックで計算することができます。

// 対処の日付
$TargetDay = date('Y-m-d');     

$WeekNum = intval(date('w', strtotime($TargetDay)));
$j = intval(date('j', strtotime($TargetDay)));
$WeekEndDay = $WeekNum !=6 ? (6 - $WeekNum) + $j : $j;

// 結果
return ceil($WeekEndDay/7);

 

解説

考え方としては、日付を週の統一した数字にまとめてしまうことです。

月末を除けば、すべての週の日付は週末(土曜日)の日付に収束させることができます。

それを7(一週間)で割って、切り上げをしてやれば、答えがでます。

 

まとめ

このロジックを考えるのに半日費やしてしまいました・・・

なんとか満足の結果が出て良かったです。

 

コメント欄より

sg さん案

print getWeekNum(date('Y-m-d'));
function getWeekNum($date) {
  $time = strtotime($date);
  return 1 + date('W', $time + 86400) - date('W', strtotime(date('Y-m', $time)) + 86400);
}

date(‘W’)で年間の第何週かが得られますので、対象日の週から対象日の月の1日の週を引いたものに1を足せば対象日がその月の第何週かが出せますよ。
date(‘W’)は月曜基準なので、日曜基準に補正するために+86400しています。

 

これはシンプルで素晴らしい!

今度からこっち使います!

 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-PHP
-, ,