с 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
По количеству воскресных дней
(Я быстро проверил, и кажется, что эти даты действительно воскресны)
Что делает этот код:
Примечание. Я изменил формат ваших дат, чтобы использовать 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);