найти сколько воскресенья из 2-х приведенных дат? - PullRequest
2 голосов
/ 24 августа 2009

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

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

Ответы [ 5 ]

5 голосов
/ 24 августа 2009

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

$date = strtotime('2009-01-01 next sunday');
$dateMax = strtotime('2009-02-23');

$nbr = 0;
while ($date < $dateMax) {
  var_dump(date('Y-m-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 секунд в час)

Примечание: я изменил формат ваших дат, чтобы использовать ГГГГ-ММ-ДД, а не ДД-ММ-ГГГ; это формат, который обычно используется - так что, вероятно, это хорошая идея, чтобы убедиться, что strtotime работает правильно. (не уверен, что он будет работать нормально с вашим форматом)

2 голосов
/ 24 августа 2009

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

$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++;
1 голос
/ 06 сентября 2012
       $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;
0 голосов
/ 07 января 2010

Увидел это где-то здесь, в 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);
0 голосов
/ 24 августа 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...