5

私は次のコードを使用しています:

public static function getDays($day, $m, $y) {
  $days = new DatePeriod(
    new DateTime("first $day of $m $y"),
    DateInterval::createFromDateString('next ' . $day),
    new DateTime("last day of $m $y")
  );
  foreach ($days as $day) {
    $dates[] = $day->format("Y-m-d");
  }
  return $dates;
}

それはほとんどの場合機能します。範囲を指定すると、範囲内にある毎日の日付が返されます。

使用法:

foreach(General::getDays('friday',$this->_uri[2],$this->_uri[3]) as $date) {
  var_dump($date);
}

2013 年 7 月の場合、これは正しい 4 つの結果を返します。すべて 2013 年 7 月の金曜日です。

string '2013-07-05' (length=10)
string '2013-07-12' (length=10)
string '2013-07-19' (length=10)
string '2013-07-26' (length=10)

ただし、最終日が後に発生する日と一致する月 (たとえば、2013 年 5 月と 2014 年 1 月の金曜日) には、返された結果からその月の最終日が失われます。

2013 年 5 月の結果、もちろん金曜日である 31 日が欠落しています。

string '2013-05-03' (length=10)
string '2013-05-10' (length=10)
string '2013-05-17' (length=10)
string '2013-05-24' (length=10)

誰もこれに対する答えを持っていますか? これは私の DateInterval の誤用ですか、それともこのクラスの本当の誤りですか?

4

1 に答える 1