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