Muito obrigado ao senhores Kleyber e Jean pelas valiosas ajudas e pelas funções…
Encontre também na net outra que estar dando certo, vou deixar aqui para os demais usuários do forum:
<?php
// Define o formato de saída da data
define('FR_DATA', 'd/m/Y');
$dtfinal = '09/02/2016';
// Teste
echo "O próximo dia util é : ", proDiaUtil($dtfinal);
/*
* proDiaUtil()
* Retorna o próximo dia útil em relação a data.
*
* @data -> Variável que recebe a data.
* Formato: DD/MM/AAAA
*/
function proDiaUtil($data)
{
// Separa a data
$dt = explode('/', $data);
$dia = $dt[0];
$mes = $dt[1];
$ano = $dt[2];
/*
(1) Pega uma data de referência (variável), compara com o datas definidas pelo sistema (feriados e finais de semana)
e retorna a próxima data um dia útil
(2) As datas do sistema são: [1] sábados; [2] domingos; [3] feriados fixos; [4] feriados veriáveis; [5] dias opcionais (ex: quarta de cinza)
(3) Retorno o próximo/imediato dia útil.
*/
// 1 - verifica se a data referente é um final de semana (sábado ou domingo);
// se sábado acrescenta mais 1 dia e faz nova verificação
// se domingo acrescenta mais 1 dia e faz nova verificação
$fsem = date('D', mktime(0,0,0,$mes,$dia,$ano));
$i = 1;
switch($fsem)
{
case 'Sat':
return proDiaUtil(date(FR_DATA, mktime(0,0,0,$mes,$dia+$i,$ano)));
break;
case 'Sun':
return proDiaUtil(date(FR_DATA, mktime(0,0,0,$mes,$dia+$i,$ano)));
break;
default:
// 2 - verifica se a data referente é um feriado
if(in_array($data, Feriados($ano))== true)
{
return proDiaUtil(date(FR_DATA, mktime(0,0,0,$mes,$dia+$i,$ano)));
}
else
{
// Retorna o dia útil
return $data;
}
break;
}
}
/*
* Feriados()
* Gera um array com as datas dos feriados com referência no ano da data pesquisada.
*
* @ano -> Variável que recebe o ano base para o cálculo;
*/
function Feriados($ano)
{
$feriados = array
(
// Armazena feriados fíxos
//Janeiro
date(FR_DATA, mktime(0,0,0,'01','01',$ano)), // 01/01 Ano novo
date(FR_DATA, mktime(0,0,0,'01','02',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'01','03',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'01','04',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'01','05',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'01','06',$ano)), // Recesso
//Março
date(FR_DATA, mktime(0,0,0,'03','19',$ano)), // Dia de São José
//Abril
date(FR_DATA, mktime(0,0,0,'04','21',$ano)), // 21/04 Tiradentes
//Maio
date(FR_DATA, mktime(0,0,0,'05','01',$ano)), // 01/05 Dia do trabalho
//Junho
date(FR_DATA, mktime(0,0,0,'06','24',$ano)), // São João
//Julho
date(FR_DATA, mktime(0,0,0,'07','15',$ano)), // N. Sa. Perpétuo Socorro
//Setembro
date(FR_DATA, mktime(0,0,0,'09','07',$ano)), // 07/09 Independencia
date(FR_DATA, mktime(0,0,0,'09','28',$ano)), // Dia do Municipio de Acopiara
//Outubro
date(FR_DATA, mktime(0,0,0,'10','04',$ano)), // São Francisco
date(FR_DATA, mktime(0,0,0,'10','12',$ano)), // 12/10 N. Senhora Aparecida
//Novembro
date(FR_DATA, mktime(0,0,0,'11','02',$ano)), // 02/11 Finados
date(FR_DATA, mktime(0,0,0,'11','15',$ano)), // 15/11 Proclamação
//Dezembro
date(FR_DATA, mktime(0,0,0,'12','20',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','21',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','22',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','23',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','24',$ano)), // 24/12 Véspera de Natal
date(FR_DATA, mktime(0,0,0,'12','25',$ano)), // 25/12 Natal
date(FR_DATA, mktime(0,0,0,'12','26',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','27',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','28',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','29',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','30',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','31',$ano)), // 31/12 Véspera de Ano novo
// Armazena feriados variáveis
//flxFeriado($ano, 'pascoa', $r = 1), // Páscoa - Sempre domingo
flxFeriado($ano, 'carn_sab', $r = 1), // Carnaval - Sempre sábado
flxFeriado($ano, 'carn_dom', $r = 1), // Carnaval - Sempre domingo
flxFeriado($ano, 'carn_seg', $r = 1), // Carnaval - Segunda
flxFeriado($ano, 'carn_ter', $r = 1), // Carnaval - Terça
//strtoupper(flxFeriado($ano, 'carn_qua', $r = 1)), // Carnaval - Quarta de cinza
flxFeriado($ano, 'sant_sex', $r = 1), // Sexta Santa
flxFeriado($ano, 'corp_chr', $r = 1) // Corpus Christi
);
return $feriados;
}
/*
* flxFeriado()
* Calcula os dias de feriados variáveis. Com base na páscoa.
*
* @ano -> Variável que recebe o ano base para o cálculo;
* @tipo -> Tipo de dados
* [carn_sab]: Sábado de carnaval;
* [carn_dom]: Domingo de carnaval;
* [carn_seg]: Segunda-feira de carnaval;
* [carn_ter]: Terça-feira de carnaval;
* [carn_qua]: Quarta-feira de carnaval;
* [sant_sex]: Sexta-feira santa;
* [corp_chr]: Corpus Christi;
*/
function flxFeriado($ano, $tipo = NULL)
{
$a=explode("/", calPascoa($ano));
switch($tipo)
{
case 'carn_sab': $d = $a[0]-50; break;
case 'carn_dom': $d = $a[0]-49; break;
case 'carn_seg': $d = $a[0]-48; break;
case 'carn_ter': $d = $a[0]-47; break;
case 'carn_qua': $d = $a[0]-46; break;
case 'sant_sex': $d = $a[0]-2; break;
case 'corp_chr': $d = $a[0]+60; break;
case NULL:
case 'pascoa': $d = $a[0]; break;
}
return date(FR_DATA, mktime(0,0,0,$a[1],$d,$a[2])); break;
}
/*
* calPascoa()
* Calcula o domingo da pascoa. Base para todos os feriádos móveis.
*
* @ano -> Variável que recebe o ano base para o cálculo ;
*/
function calPascoa($ano)
{
$A = ($ano % 19);
$B = (int)($ano / 100);
$C = ($ano % 100);
$D = (int)($B / 4);
$E = ($B % 4);
$F = (int)(($B + 8) / 25);
$G = (int)(($B - $F + 1) / 3);
$H = ((19 * $A + $B - $D - $G + 15) % 30);
$I = (int)($C / 4);
$K = ($C % 4);
$L = ((32 + 2 * $E + 2 * $I - $H - $K) % 7);
$M = (int)(($A + 11 * $H + 22 * $L) / 451);
$P = (int)(($H + $L - 7 * $M + 114) / 31);
$Q = (($H + $L - 7 * $M + 114) % 31) + 1;
return date('d/m/Y', mktime(0,0,0,$P,$Q,$ano));
}
?>