2015-06-26 3 views
-1

Я использую библиотеку Carbon PHP. Ответ в дублированном вопросе использует встроенную функцию PHP.Как найти количество дней в диапазоне дат, которые находятся в пределах другого диапазона дат в PHP?

count how many days within a date range are within another date range


Ниже приведен код, который я использую, чтобы найти, если диапазон дат ($userDateStart и $userDateEnd) находится с другим диапазоном дат ($couponStart and $ couponEnd`) и она отлично работает без каких-либо ошибок, но Я не знаю, как найти дни, которые перекрываются/существуют в этом диапазоне дат?

Библиотека я использую http://carbon.nesbot.com/docs/

Ожидаемый результат должен быть 4 в этом case..Hope вы мне помочь.

$userDateStart = Carbon::createFromFormat('Y-m-d','2015-06-26'); 
$userDateEnd = Carbon::createFromFormat('Y-m-d','2015-06-29'); 

$couponStart = Carbon::createFromFormat('Y-m-d','2015-06-26'); 
$couponEnd = Carbon::createFromFormat('Y-m-d','2015-10-31'); 

if(($userDateStart >= $couponStart && $userDateEnd <= $couponEnd) || 
    ($couponStart >= $userDateStart && $couponEnd <= $userDateEnd)){ 
    die("Yes,The date is within this date range"); 
} 
die("No,It is not within this date range"); 
+4

Трудность, которую вы имеете в понимании ответа на предыдущий вопрос, не имеет никакого отношения к тому, является ли этот вопрос дубликатом. –

+0

Я использую Carbon PHP library. Конечно, есть и другой простой способ рассчитать дни. – user3407278

+4

Возможный дубликат [подсчет количества дней в диапазоне дат в пределах другого диапазона дат] (http://stackoverflow.com/questions/13227912/count-how-many-days-within-a-date-range-are- in-another-date-range) – rogerdeuce

ответ

0

Согласно документации, которая была предоставлена, Вы должны использовать это:

$dt = Carbon::create(2012, 4, 30, 0); 
echo $dt->diffInDays($dt->copy()->addMonth()); // 30 
echo $dt->diffInDays($dt->copy()->addWeek()); // 7 

Так работать с вашей программой, я думаю, вам нужно сделать, это:

$userDateStart = Carbon::createFromFormat('Y-m-d','2015-06-26'); 
$userDateEnd = Carbon::createFromFormat('Y-m-d','2015-06-29'); 

$couponStart = Carbon::createFromFormat('Y-m-d','2015-06-26'); 
$couponEnd = Carbon::createFromFormat('Y-m-d','2015-10-31'); 

//Determin the highest date from the starts and the minimum dates from the ends 
$startBetweenDate = $userDateStart->max($couponStart); 
$endBetweenDate = $userDateEnd->min($couponEnd); 

//Now find how many days are between 
echo $startBetweenDate->diffInDays($endBetweenDate); //Should be 4 

Обратите внимание: это не было протестировано, так как у меня нет установленной библиотеки Carbon.

+0

спасибо за это решение, но он не работает в некоторых редких случаях. – user3407278