LoginSignup
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-08

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する

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1