PHP
Carbon

【PHP】Carbonで月が何週あるか取得する

More than 1 year has passed since last update.

Carbon - A simple PHP API extension for DateTime.

CarbonでweekOfMonthプロパティを使うとその日が何週目であるかを取得できるが

このプロパティはその日を1週の日数で割って切り上げたものが返ってくるのでカレンダー上で何周目であるかには使えない

Carbon::setWeekStartsAt(Carbon::SUNDAY); // 週の最初を日曜に設定

Carbon::setWeekEndsAt(Carbon::SATURDAY); // 週の最後を土曜に設定
$dt = Carbon::create(2016, 10); // 2016年10月を作成
// 10月1日が何周目か(1週目)
$dt->startOfMonth()->weekOfMonth; // 1
// 10月31日が何周目か(6週目)
$dt->endOfMonth()->weekOfMonth; // 5 (!?)

月末が何周目かを取得すればいいと思っていたけどそういう使い方ができないのであれば計算するしかないのでやってみよう

private function getWeekOfMonth($year, $month){

Carbon::setWeekStartsAt(Carbon::SUNDAY);
Carbon::setWeekEndsAt(Carbon::SATURDAY);

$dt = Carbon::create($year, $month);
$days = $dt->daysInMonth; // 月に何日あるか取得
$daysParWeek = $dt::DAYS_PER_WEEK; // 1週の日数を取得(デフォルトは 7 が設定されている)
$dayOfWeek = $dt->startOfMonth()->dayOfWeek; // 1日の曜日(int)を取得

return (int) ceil(($days - ($daysParWeek - $dayOfWeek)) / $daysParWeek) + 1;
}

できた

月の日数(days)を1週の日数(daysParWeek)から1日の曜日(dayOfWeek)を引いたもので引いて、1週の日数(daysParWeek)で割ったものを切り上げてintにcastして+1する

もっとスマートな方法ありそうだけど・・・