Arquivo

Arquivo de 8, setembro, 2008

Somando dias utéis a uma data específica com PHP

8, setembro, 2008 Sem comentários

Durante meu trabalho hoje no desenvolvimento de um projeto, precisei somar uma quantidade X de dias úteis a uma data específica.

Nessa recorrida, encontrei um tópico e um post que me inspirou a criar a seguinte função em PHP:

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)));
}

Exemplo de uso:

echo somar_dias_uteis('05/12/2006');
echo somar_dias_uteis('2006-12-01',15);

O que ela faz é pegar a data informada, somar uma quantidade de dias úteis a ela e retornar uma nova data com a soma realizada.

Se você informar à função uma data no formato brasileiro – dd/mm/aaaa – ela irá convertê-la para o padrão americano – aaaa-mm-dd. Esse padrão americano é utilizado pelo MySQL quando você define um campo com o formato DATE. Caso sua data esteja armazenada no formato DATETIME a função irá pegar somente a data e excluir o horário.

Fonte: php.net & http://leandrovieira.com