目次
はじめに
カレンダーのシステムを作ることになったので、日付けを週ごとに並べる為のグループ分けするロジックが必要になりました。
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);
海外ニキー! すげーシンプル!
コメント欄より
急ぎの場合は、海外ニキもしくはカバノキ方式を利用してください。
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しています。
これはシンプルで素晴らしい!
今度からこっち使います!