|
|
|
| Добрый день. Пожалуйста, подскажите, как корректно определить количество дней, приходящиеся в каждом периоде, между двумя произвольными датами
например:
периоды - 01/01/2015-30/04/2015, 01/05/2015-15/08/2015 и 16/08/2015-31/12/2015
произвольные даты - 05/04/2015 ->18/08/2015
спасибо | |
|
|
|
|
|
|
|
|
для: Igorek
(12.07.2015 в 08:03)
| | в уме я представляю, что нужно перевести даты в метки времени, все не трудно
у меня получилось нечто следующее:
function getDaysForPer($p,$a,$b){
$startTS = strtotime($a); // начальная заданная дата
$stopTS = strtotime($b); // конечная заданная дата
// массив периодов
//[3] => Array (
// [3] => 20150621,20150820
// [5] => 20150821,20150930
// [2] => 20151001,20151215
// [6] => 20151216,20160110
// )
$str = '';
foreach($p as $perID => $perDates){
list($perStart,$perStop) = split(',',$perDates);
$perStartTS = strtotime($perStart);
$perStopTS = strtotime($perStop);
// не могу поставить условия вхождения дат в перерод
if($startTS >= $perStartTS || $startTS < $perStopTS){
$dateA = new DateTime($a);
$dateB = new DateTime($b);
$str .= $dateB->diff($dateA)->days;
}
}
return $str;
}
|
| |
|
|
|
|
|
|
|
для: ZeeG
(12.07.2015 в 11:08)
| | в итоге получилось:
function getDaysForPer($p,$a,$b){
$startTS = strtotime($a);
$stopTS = strtotime($b);
$str = '';
if( count($p) == 1 ){
$dateA = new DateTime($a);
$dateB = new DateTime($b);
$str .= $dateB->diff($dateA)->days;
}
if( count($p) > 1 ){
$tot = count($p);
$i = 0;
foreach($p as $perID => $perDates){
list($perStart,$perStop) = split(',',$perDates);
$perStartTS = strtotime($perStart);
$perStopTS = strtotime($perStop);
if($i == 0){
$perStopTS = strtotime($perStop."+1 day");
$dateA = new DateTime($a);
$dateB = new DateTime(date("Ymd",strtotime($perStop."+1 day")));
$str .= $dateB->diff($dateA)->days .' ';
}
elseif( $i == $tot-1){
$dateA = new DateTime($perStart);
$dateB = new DateTime($b);
$str .= $dateB->diff($dateA)->days .' ';
}
elseif( $i < $tot-1){
$dateA = new DateTime($perStart);
$dateB = new DateTime($perStop);
$str .= $dateB->diff($dateA)->days .' ';
}
$i++;
}
}
return $str;
}
|
хотелось бы записать короче, но ...) | |
|
|
|