узнать, сколько воскресенья из двух заданных дат?

с 01-01-2009 по 23-23-2009

как узнать, сколько воскресенья между этими днями?

Что-то вроде этого:

$date = strtotime('2009-01-01 next sunday'); $dateMax = strtotime('2009-02-23'); $nbr = 0; while ($date < $dateMax) { var_dump(date('Ym-d', $date)); $nbr++; $date += 7 * 24 * 3600; } var_dump($nbr); 

И вы получите:

 string '2009-01-04' (length=10) string '2009-01-11' (length=10) string '2009-01-18' (length=10) string '2009-01-25' (length=10) string '2009-02-01' (length=10) string '2009-02-08' (length=10) string '2009-02-15' (length=10) string '2009-02-22' (length=10) 

Для дат каждого воскресенья и:

 int 8 

По количеству воскресных дней

(Я быстро проверил, и кажется, что эти даты действительно воскресны)

Что делает этот код:

  • во-первых, получить дату первого воскресенья после 2009-01-01
  • то, если текущая дата до 2009-02-23, итерация
  • на каждой итерации добавьте 7 * 24 * 3600 секунд (7 дней в неделю, 24 часа в сутки, 3600 секунд в час)

Примечание. Я изменил формат ваших дат, чтобы использовать YYYY-MM-DD, а не DD-MM-YYY; это формат, который обычно используется, поэтому, вероятно, хорошая идея использовать его, чтобы быть уверенным, что strtotime работает правильно. (не уверен, что он будет работать с вашим форматом)

Это должно делать трюк без каких-либо петель.

 $start = mktime(0, 0, 0, $start_month, $start_day, $start_year); $end = mktime(0, 0, 0, $end_month, $end_day, $end_year); $days = ($end - $start) / 86400; $sundays = $days / 7 // check if there are enough leftover days for one more sunday if((localtime($start)[6]+($days % 7) > 6) $sundays++; 
  $sunday=0; for($i=1; $i<=date("t", strtotime("2012-09-01")); $i++) { if(date("l", strtotime("2012-09-".$i)) === 'Sunday') { $sunday++; } } echo "no of Sunday=".$sunday; 

Вы можете рассчитать, сколько недель между этими двумя датами, в PHP должна быть какая-то библиотека управления датами, а затем количество воскресений будет числом недель, вам все равно нужно будет увидеть, является ли первая дата воскресным или нет , а последняя дата – воскресенье или не иметь дело с краями диапазона дат.

Некоторые примеры можно увидеть здесь .

Видел это где-то здесь в SO, и я использовал его в своем проекте. Не удалось отследить исходное сообщение.

 // function to calculate number of given day within date range function number_of_days($day, $start, $end){ $w = array(date('w', $start), date('w', $end)); return floor( ( date('z', $end) - date('z', $start) ) / 7) + ($day == $w[0] || $day == $w[1] || $day < ((7 + $w[1] - $w[0]) % 7)); } // define your dates $start = mktime(0, 0, 0, 1, 16, 2010); $end = mktime(0, 0, 0, 1, 25, 2010); // display the count echo number_of_days(0, $start, $end);