Подсчитывать дни в течение месяца от диапазона дат

У меня три диапазона дат в таблице mysql, как следует

  • с 2013-09-29 по 2013-10-02
  • с 2013-10-14 по 2013-10-16
  • с 2013-10-28 по 2013-11-05

Я хочу считать только дни, которые происходят в Месяц Октября, например, с первого диапазона (2013-09-29 до 2013-10-02). Я должен получить разницу в два дня (1-й и 2-й октября), и он должен игнорировать дни с сентябрьского месяца. Наконец, я хочу подсчитать количество дней в определенном месяце с диапазонов дат.

Это можно сделать из прямого запроса mysql. или любую короткую логику PHP.

вот мой идентификатор структуры таблицы, employee_id, leave_start, leave_to

Я ищу способ как-то вроде

функция countLeaves ($ employee_id, $ month) {

// код

return $ numberOfLeaves}

Solutions Collecting From Web of "Подсчитывать дни в течение месяца от диапазона дат"

Вам нужно рассчитать первый день месяца 2013-10-01 и последний день месяца 2013-10-31, а затем вы можете использовать такой запрос:

 SELECT DATEDIFF( LEAST(d_end, '2013-10-31'), GREATEST(d_start, '2013-10-01'))+1 days FROM ranges WHERE d_start<='2013-10-31' AND d_end>='2013-10-01' 

Пожалуйста, смотрите здесь .

function getAllDates ($ fromDate, $ toDate, $ rejectmonth) {if (! $ fromDate ||! $ toDate) {return false;}

  $dateMonthYearArr = array(); $fromDateTS = strtotime($fromDate); $toDateTS = strtotime($toDate); for ($currentDateTS = $fromDateTS; $currentDateTS <= $toDateTS; $currentDateTS += (60 * 60 * 24)) { if($rejectmonth == date("m",$currentDateTS)) continue; $currentDateStr = date("Ymd",$currentDateTS); $dateMonthYearArr[] = $currentDateStr; } return $dateMonthYearArr; } 

эта функция вернет даты массива, которые находятся в диапазонах дат.

getAllDates ( '2013-09-10', '2013-19-10', 10);

 $month = strtotime(date('Ym-01', time())); $daysCount = (int)(time() - $month) / (24 * 3600); 

и если вам нужно проверить с любой даты до любой даты:

 /** * @var $dateFrom string Date to count from, * you can use date('Ym-01') as start of current month * @var $dateTo string End of period date, example: '2013-09-05' **/ function getDaysCount($dateFrom, $dateTo) { return (int)(strtotime($dateTo) - strtotime($dateFrom)) / (24 * 3600); }