Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Vieira Pinho

[Resolvido] Função que soma dias utéis a uma data específica

Recommended Posts

Olá pessoal,

 

Em dezembro do ano passado, criei uma função para somar dias utéis a data específica. A função pode ser visualizada aqui:

http://leandrovieira.com/archive/somando-d...ecifica-com-php

 

Porém, ela está com um pequeno bug, e talvez alguém aqui consiga resolver.

 

Explico.

 

Se utilizo echo somar_dias_uteis('2007-02-16',3); a função me retorna: 20/02/2007 (errado) quando deveria retornar 21/02/2007 (certo).

 

Aqui está o código da função:

 

function somar_dias_uteis($str_data,$int_qtd_dias_somar = 7) {	// Caso seja informado uma data do MySQL do tipo DATETIME - aaaa-mm-dd 00:00:00	// Transforma para DATE - aaaa-mm-dd	$str_data = substr($str_data,0,10);	// Se a data estiver no formato brasileiro: dd/mm/aaaa	// Converte-a para o padrão americano: aaaa-mm-dd	if ( preg_match("@/@",$str_data) == 1 ) {		$str_data = implode("-", array_reverse(explode("/",$str_data)));	}	$count_days = 0;	$int_qtd_dias_uteis = 0;	while ( $int_qtd_dias_uteis < $int_qtd_dias_somar ) {		$count_days++;		//if ( ( $dias_da_semana = date('w', strtotime('+'.$count_days.' day')) ) != '0' && $dias_da_semana != '6' ) {		if ( ( $dias_da_semana = gmdate('w', strtotime('+'.$count_days.' day')) ) != '0' && $dias_da_semana != '6' ) {			$int_qtd_dias_uteis++;		}	}	return gmdate('d/m/Y',strtotime('+'.$count_days.' day',strtotime($str_data)));}
Valeus.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Buenas, Leandro!

Muito bacana sua função, não a conhecia http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Fiz algumas modificações e testei com a data passada. Forcei a gerar com mktime() a partir da data informada (em array).

Veja como ficou:

 

PHP
<?php

 

ini_set('display_errors', true);

ini_set('error_reporting', E_ALL);

 

function somar_dias_uteis($str_data,$int_qtd_dias_somar = 7) {

    // Caso seja informado uma data do MySQL do tipo DATETIME - aaaa-mm-dd 00:00:00

    // Transforma para DATE - aaaa-mm-dd

    $str_data = substr($str_data,0,10);

       

    // Se a data estiver no formato brasileiro: dd/mm/aaaa

    // Converte-a para o padrão americano: aaaa-mm-dd

    if ( preg_match("@/@",$str_data) == 1 ) {

        $str_data = implode("-", array_reverse(explode("/",$str_data)));

    }

        $array_data = explode('-', $str_data);

       

    $count_days = 0;

    $int_qtd_dias_uteis = 0;   

       

    while ( $int_qtd_dias_uteis < $int_qtd_dias_somar ) {

        $count_days++;

                if ( ( $dias_da_semana = gmdate('w', strtotime('+'.$count_days.' day', mktime(0, 0, 0, $array_data[1], $array_data[2], $array_data[0]))) ) != '0' && $dias_da_semana != '6' ) {

            $int_qtd_dias_uteis++;

        }

    }

    return gmdate('d/m/Y',strtotime('+'.$count_days.' day',strtotime($str_data)));

}

 

echo somar_dias_uteis('2007-02-16', 3);

 

?>

 

Abraços,

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.