Contar o número de dias úteis entre duas datas
Função que passado uma data conta quantos dias úteis faltam (para datas no futuro) ou se passaram (datas no passado) para o dia de hoje.
Se for passado o segundo parâmetro, calcula a diferença entre as duas data.
Se for passado o segundo parâmetro, calcula a diferença entre as duas data.
Data | Autor | Changelog | Download |
---|---|---|---|
27/06/2007 4:57pm | Marcos Regis | - | Versão 0.1 |
01/03/2010 11:17pm | Marcos Regis | Versão 1.0.0 | Versão 1.0.0 |
19/04/2011 3:45pm | Marcos Regis | Versão 1.0.1 | Versão 1.0.1 |
Desculpa.. não é parseInt mas sim intVal hehe
04/08/2015 8:23am
(~9 anos atrás)
Fiz uma modificação para considerar o uso do SÁBADO e também adicionar numeros de feriados na data para subtração.
/**
* Calcula a quantidade de dias úteis entre duas datas (sem contar feriados)
* @author Marcos Regis
* @param String $datainicial
* @param [String $datafinal=null]
* @param [Boolean $sabado=false] considerar sabado como dia útil?
* @param [Integer $feriados=0] Numero de dias (feriados) a serem subtraidos
* @return int Quantidade de dias úteis
*/
function dias_uteis($datainicial,$datafinal=null,$sabado=false,$feriados=0){
if (!isset($datainicial)) return false;
if (!is_numeric($feriados)) $feriados=0;
$segundos_datainicial = strtotime(str_replace("/","-",$datainicial));
if (!isset($datafinal)) $segundos_datafinal=time();
else $segundos_datafinal = strtotime(str_replace("/","-",$datafinal));
$dias = abs(floor(floor(($segundos_datafinal-$segundos_datainicial)/3600)/24 ) );
$uteis=0;
for($i=1;$i<=$dias;$i++)
{
$diai = $segundos_datainicial+($i*3600*24);
$w = date('w',$diai);
if ($w>0 && (($sabado==true && $w<=6) || $w<6)){ $uteis++; } //INCLUI SÁBADO
}
return ($uteis - parseInt($feriados));
}
/**
* Calcula a quantidade de dias úteis entre duas datas (sem contar feriados)
* @author Marcos Regis
* @param String $datainicial
* @param [String $datafinal=null]
* @param [Boolean $sabado=false] considerar sabado como dia útil?
* @param [Integer $feriados=0] Numero de dias (feriados) a serem subtraidos
* @return int Quantidade de dias úteis
*/
function dias_uteis($datainicial,$datafinal=null,$sabado=false,$feriados=0){
if (!isset($datainicial)) return false;
if (!is_numeric($feriados)) $feriados=0;
$segundos_datainicial = strtotime(str_replace("/","-",$datainicial));
if (!isset($datafinal)) $segundos_datafinal=time();
else $segundos_datafinal = strtotime(str_replace("/","-",$datafinal));
$dias = abs(floor(floor(($segundos_datafinal-$segundos_datainicial)/3600)/24 ) );
$uteis=0;
for($i=1;$i<=$dias;$i++)
{
$diai = $segundos_datainicial+($i*3600*24);
$w = date('w',$diai);
if ($w>0 && (($sabado==true && $w<=6) || $w<6)){ $uteis++; } //INCLUI SÁBADO
}
return ($uteis - parseInt($feriados));
}
04/08/2015 8:23am
(~9 anos atrás)
Há um probleminha onde a variável $uteis é incrementada, ele faz isso duas vezes e os dias ficam errados.
19/04/2011 2:57pm
(~13 anos atrás)