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