У меня три диапазона дат в таблице mysql, как следует
Я хочу считать только дни, которые происходят в Месяц Октября, например, с первого диапазона (2013-09-29 до 2013-10-02). Я должен получить разницу в два дня (1-й и 2-й октября), и он должен игнорировать дни с сентябрьского месяца. Наконец, я хочу подсчитать количество дней в определенном месяце с диапазонов дат.
Это можно сделать из прямого запроса mysql. или любую короткую логику PHP.
вот мой идентификатор структуры таблицы, employee_id, leave_start, leave_to
Я ищу способ как-то вроде
функция countLeaves ($ employee_id, $ month) {
// код
return $ numberOfLeaves}
Вам нужно рассчитать первый день месяца 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); }