[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(一週間)で割って、切り上げをしてやれば、答えがでます。

 

まとめ

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

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

 

海外ニキの手法

$today = date('Y-m-d');//ex. 2022-01-01
return (ceil((date('d', strtotime($today)) - date('w', strtotime($today)) - 1) / 7) + 1);

 

参考
https://www.webdevqa.jp.net/ja/php/php%E3%81%A7%E6%97%A5%E4%BB%98%E3%81%8B%E3%82%89%E6%9C%88%E3%81%AE%E9%80%B1%E7%95%AA%E5%8F%B7%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F/1055743161/

海外ニキー! すげーシンプル!

 

コメント欄より

1月が上手く取得できない不具合があるようです(PHPのバグっぽい)。
急ぎの場合は、海外ニキもしくはカバノキ方式を利用してください。

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
-, ,