una sabados restar persona meses fechas entre edad domingos dias contar como calcular aƱos antiguedad php arrays date

php - restar - contar sabados y domingos en excel



Obtener el rango de fechas entre dos fechas, excluyendo los fines de semana (4)

Dadas las siguientes fechas:

6/30/2010 - 7/6/2010

y una variable estática:

$h = 7.5

Necesito crear una matriz como:

Array ( [2010-06-30] => 7.5 [2010-07-01] => 7.5 => [2010-07-02] => 7.5 => [2010-07-05] => 7.5 => [2010-07-06] => 7.5)

Días de fin de semana excluidos.

No, no es tarea ... por alguna razón no puedo pensar bien hoy.


El método más simple:

$start = strtotime(''6/30/2010''); $end = strtotime(''7/6/2010''); $result = array(); while ($start <= $end) { if (date(''N'', $start) <= 5) { $current = date(''m/d/Y'', $start); $result[$current] = 7.5; } $start += 86400; } print_r($result);

ACTUALIZACIÓN: se olvidó de saltar los fines de semana. Esto debería funcionar ahora.


Para PHP> = 5.3.0, use la clase DatePeriod . Desafortunadamente, apenas está documentado.

$start = new DateTime(''6/30/2010''); $end = new DateTime(''7/6/2010''); $oneday = new DateInterval("P1D"); $days = array(); $data = "7.5"; /* Iterate from $start up to $end+1 day, one day in each iteration. We add one day to the $end date, because the DatePeriod only iterates up to, not including, the end date. */ foreach(new DatePeriod($start, $oneday, $end->add($oneday)) as $day) { $day_num = $day->format("N"); /* ''N'' number days 1 (mon) to 7 (sun) */ if($day_num < 6) { /* weekday */ $days[$day->format("Y-m-d")] = $data; } } print_r($days);


Esta es la respuesta de gnud pero como una función (también se agregó una opción para excluir el día actual del cálculo):

(ejemplos a continuación)

public function getNumberOfDays($startDate, $endDate, $hoursPerDay="7.5", $excludeToday=true) { // d/m/Y $start = new DateTime($startDate); $end = new DateTime($endDate); $oneday = new DateInterval("P1D"); $days = array(); /* Iterate from $start up to $end+1 day, one day in each iteration. We add one day to the $end date, because the DatePeriod only iterates up to, not including, the end date. */ foreach(new DatePeriod($start, $oneday, $end->add($oneday)) as $day) { $day_num = $day->format("N"); /* ''N'' number days 1 (mon) to 7 (sun) */ if($day_num < 6) { /* weekday */ $days[$day->format("Y-m-d")] = $hoursPerDay; } } if ($excludeToday) array_pop ($days); return $days; }

Y para usarlo:

$date1 = "2012-01-12"; $date2 = date(''Y-m-d''); //today''s date $daysArray = getNumberOfDays($date1, $date2); echo ''hours: '' . array_sum($daysArray); echo ''days: '' . count($daysArray);


Este es el enfoque OOP, por las dudas. Devuelve una matriz con todas las fechas, excepto los fines de semana.

class Date{ public function getIntervalBetweenTwoDates($startDate, $endDate){ $period = new DatePeriod( new DateTime($startDate), new DateInterval(''P1D''), new DateTime($endDate) ); $all_days = array();$i = 0; foreach($period as $date) { if ($this->isWeekend($date->format(''Y-m-d''))){ $all_days[$i] = $date->format(''Y-m-d''); $i++; } } return $all_days; } public function isWeekend($date) { $weekDay = date(''w'', strtotime($date)); if (($weekDay == 0 || $weekDay == 6)){ return false; }else{ return true; } } } $d = new Date(); var_dump($d->getIntervalBetweenTwoDates(''2015-08-01'',''2015-08-08''));