Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

João Otávio 21

Descobrir quantos dias uteis faltam no mês

Recommended Posts

Fala galera,

 

Preciso de arrumar um modo de descobrir quantos dias úteis ainda faltam para o mês acabar.

 

Até então eu tenho o seguinte código, para saber o total de dias:

 

*************************************************************

function dias_uteis($mes,$ano){

$uteis = 0;

$dias_no_mes = $num = cal_days_in_month(CAL_GREGORIAN, $mes, $ano);

 

for($dia = 1; $dia <= $dias_no_mes; $dia++){

$timestamp = mktime(0, 0, 0, $mes, $dia, $ano);

$semana = date("N", $timestamp);

if($semana < 6) $uteis++;

}

return $uteis;

}

echo 'DIAS UTEIS DO MES ATUAL:' . dias_uteis(date('m'),date('Y')); // Recebe dias úteis do mês atual

*************************************************************

 

O usuário irá digitar a data no seguinte formato DD/MM/YYYY e eu tenho de descobrir os dias restantes..

Exemplo: Hoje é dia 11/01/2013, portanto restam 14 dias úteis para o fim do mes (31/01/2013).

 

Se alguém puder me ajudar, muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... Pensando rápido acredito que você terá que trabalhar com arrays. Terá que validar o calendario. Ver os meses que tem 30 ou 31 dias ou 28/29 (validar ano bissexto). Taria 2 arrays. O primeiro os meses com 30 dias, o segundo com 31. E verifica se o mês corrente é 2, se for, nele verifica se é bissexto ou não para ver se tem 28 ou 29 dias. A idéia (pensando bem por cima) é essa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, bem...

 

1º - Existe os Feriados, eles teriam que ser validados para a contagem de dias úteis.

2º - Dentro do IF para verificar se acrescenta +1 na contagem de dias úteis, logo após acrescentar, poderia colocar:

 

if($dia == date("d"){
    $diaUteisAteAgora = $uteis;
}

 

... E no retorno colocaria:

 


return $uteis-$diaUteisAteAgora;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala galera,

 

Preciso de arrumar um modo de descobrir quantos dias úteis ainda faltam para o mês acabar.

 

Até então eu tenho o seguinte código, para saber o total de dias:

 

*************************************************************

function dias_uteis($mes,$ano){

$uteis = 0;

$dias_no_mes = $num = cal_days_in_month(CAL_GREGORIAN, $mes, $ano);

 

for($dia = 1; $dia <= $dias_no_mes; $dia++){

$timestamp = mktime(0, 0, 0, $mes, $dia, $ano);

$semana = date("N", $timestamp);

if($semana < 6) $uteis++;

}

return $uteis;

}

echo 'DIAS UTEIS DO MES ATUAL:' . dias_uteis(date('m'),date('Y')); // Recebe dias úteis do mês atual

*************************************************************

 

O usuário irá digitar a data no seguinte formato DD/MM/YYYY e eu tenho de descobrir os dias restantes..

Exemplo: Hoje é dia 11/01/2013, portanto restam 14 dias úteis para o fim do mes (31/01/2013).

 

Se alguém puder me ajudar, muito obrigado.

 

é molesa, brother... ao invés de você iniciar o FOR com o valor fixo, inicie no dia atual, se você quiser contar o dia atual tb, ou se não quiser, coloque o FOR iniciando com o dia atual + 1;

 

desse jeito:

para contar o dia atual:

for($dia = date("j"); $dia <= $dias_no_mes; $dia++)

 

 

para não contar o dia atual:

for($dia = date("j")+1; $dia <= $dias_no_mes; $dia++)

 

espero ter ajudado....

abraço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Calma pessoa, não vamos reinventar a roda. Vejo muita gente não utilizando os recursos que o PHP oferece. É claro que o PHP não vai possuir todos os feriados: internacionais; nacionais; regionais; municipais; facultativos; religiosos.

 

Mas boa parte ele já resolve. Inclusive, a solução mais próxima que eu vi foi do @Jonatã Cioni. Entretanto, ainda está utilizando recursos ultrapassados do PHP.

 

Nos três últimos tópicos sobre Data/Hora, as soluções apresentadas foram com recursos ultrapassados. Desde a versão 5.2 do PHP, existe a biblioteca DateTime. Na versão 5.3 a biblioteca foi melhorada com novas funções extremamente úteis.

 

A solução que eu apresento a abaixo, é boa (não que eu goste muito dela) para contar os dias restantes do mês.

$data = new DateTime();
$dataMesQueVem = new DateTime('2013-02-01');

$periodo = new DateInterval('P1D');
$diasUteis = 0;
do {
   if($data->format('w') > 0 && $data->format('w') < 6) {
       $diasUteis++;
   }
} while($data->add($periodo) < $dataMesQueVem);

printf('Total de dias úteis restantes: %d dias' , $diasUteis);

 

Saída (contando o dia atual):

Total de dias úteis restantes: 15 dias

 

Para verem o código em funcionamento:

http://codepad.viper-7.com/tSNuk0

 

Existe uma equação matemática que calcula de todo o ano, mas eu não me lembro dela. Tenho em um código Java perdido no meu computador pessoal.

 

Apesar da solução do @Jonatã Cioni fazer exatamente o que a minha solução faz, é utilizando recursos antigos que, em virtude da criação da biblioteca DateTime, poderá, ou irá, ser descontinuado. É sempre importante atualizarem as suas funções. Muitos desenvolvedores possuem dores de cabeças com sistemas legados, quando um recurso é descontinuado.

 

Como você não quer contar o dia atual, não utilize o DO, o código será o seguinte:

$data = new DateTime();
$dataMesQueVem = new DateTime('2013-02-01');

$periodo = new DateInterval('P1D');
$diasUteis = 0;
while($data->add($periodo) < $dataMesQueVem) {
   if($data->format('w') > 0 && $data->format('w') < 6) {
       $diasUteis++;
   }
}
printf('Total de dias úteis restantes: %d dias' , $diasUteis);

 

Saída:

Total de dias úteis restantes: 14 dias

 

Código em funcionamento:

http://codepad.viper-7.com/hMvLU4

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela atenção pessoal !

 

Gabriel Heming, tentei utilizar sua função, porém me retornou um erro de que não era possível localizar a classe DateInterval.

Não entendi do que se tratava, dei uma rápida lida no php.net sobre a função, porém como estou com um pouco de pressa pra pegar esses dias úteis restantes, acabei optando pelo método:

for($dia = date("d"); $dia <= $dias_no_mes; $dia++)

 

No mais, obrigado a todos !

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua versão do PHP não possui suporte a classe DateInterval. O PHP necessita ser 5.3 ou superior.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.