Faian 0 Denunciar post Postado Maio 14, 2009 Estava dando uma pesquisada na net sobre cálculos de dias úteis e o que consegui encontrar foi cálculos somente dos feriados ou de finais de semana, não achei nada que continha os dois, ai resolvi pegar os códigos que tinha achado e fiz isso. O calculo dos dias úteis retirando os finais de semana é criação do Leandro Vieira com contribuição de Anderson Mello já o calculo dos feriados moveis é criação de Yuri Vecchi. A junção dos dois é minha, rs... <?php include("feriado.php"); /* formas diferentes de usar a funcao 1- qdt de dias uteis a contar apartir de uma data especifica ou fixa você pode passar a data direto nos paremetros da funcao function somar_dias_uteis($str_data,$int_qtd_dias_somar = 7,$feriados) chamando a funcao somar_dias_uteis('09/04/2009','',''); ou $data = date('Y-m-d'); somar_dias_uteis('$data','',''); 2- nao precisa passar os dias como parametro da funcao tipo function somar_dias_uteis($str_data,$int_qtd_dias_somar,$feriados) para chamar a funcao fica somar_dias_uteis('09/04/2009','4',''); ou $data = date('Y-m-d'); somar_dias_uteis('$data','4',''); */ function somar_dias_uteis($str_data,$int_qtd_dias_somar,$feriados) { // 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))); } // chama a funcao que calcula a pascoa $pascoa_dt = dataPascoa(date('Y')); $aux_p = explode("/", $pascoa_dt); $aux_dia_pas = $aux_p[0]; $aux_mes_pas = $aux_p[1]; $pascoa = "$aux_mes_pas"."-"."$aux_dia_pas"; // crio uma data somente como mes e dia // chama a funcao que calcula o carnaval $carnaval_dt = dataCarnaval(date('Y')); $aux_carna = explode("/", $carnaval_dt); $aux_dia_carna = $aux_carna[0]; $aux_mes_carna = $aux_carna[1]; $carnaval = "$aux_mes_carna"."-"."$aux_dia_carna"; // chama a funcao que calcula corpus christi $CorpusChristi_dt = dataCorpusChristi(date('Y')); $aux_cc = explode("/", $CorpusChristi_dt); $aux_cc_dia = $aux_cc[0]; $aux_cc_mes = $aux_cc[1]; $Corpus_Christi = "$aux_cc_mes"."-"."$aux_cc_dia"; // chama a funcao que calcula a sexta feira santa $sexta_santa_dt = dataSextaSanta(date('Y')); $aux = explode("/", $sexta_santa_dt); $aux_dia = $aux[0]; $aux_mes = $aux[1]; $sexta_santa = "$aux_mes"."-"."$aux_dia"; $feriados = array("01-01", $carnaval, $sexta_santa, $pascoa, $Corpus_Christi, "04-21", "05-01", "06-12" ,"07-09", "07-16", "09-07", "10-12", "11-02", "11-15", "12-24", "12-25", "12-31"); $array_data = explode('-', $str_data); $count_days = 0; $int_qtd_dias_uteis = 0; while ( $int_qtd_dias_uteis < $int_qtd_dias_somar ) { $count_days++; $day = date('m-d',strtotime('+'.$count_days.'day',strtotime($str_data))); if(($dias_da_semana = gmdate('w', strtotime('+'.$count_days.' day', gmmktime(0, 0, 0, $array_data[1], $array_data[2], $array_data[0]))) ) != '0' && $dias_da_semana != '6' && !in_array($day,$feriados)) { $int_qtd_dias_uteis++; } } return gmdate('d/m/Y',strtotime('+'.$count_days.' day',strtotime($str_data))); } somar_dias_uteis('09/04/2009','',''); ?> cria um outro arquivo chamado feriado.php <?php // dataPascoa(ano, formato); // Autor: Yuri Vecchi // // Funcao para o calculo da Pascoa // Retorna o dia da pascoa no formato desejado ou false. // // ######################ATENCAO########################### // Esta funcao sofre das limitacoes de data de mktime()!!! // ######################################################## // // Possui dois parametros, ambos opcionais // ano = ano com quatro digitos // Padrao: ano atual // formato = formatacao da funcao date() http://br.php.net/date // Padrao: d/m/Y function dataPascoa($ano=false, $form="d/m/Y") { $ano=$ano?$ano:date("Y"); if ($ano<1583) { $A = ($ano % 4); $B = ($ano % 7); $C = ($ano % 19); $D = ((19 * $C + 15) % 30); $E = ((2 * $A + 4 * $B - $D + 34) % 7); $F = (int)(($D + $E + 114) / 31); $G = (($D + $E + 114) % 31) + 1; return date($form, mktime(0,0,0,$F,$G,$ano)); } else { $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($form, mktime(0,0,0,$P,$Q,$ano)); } } // dataCarnaval(ano, formato); // Autor: Yuri Vecchi // // Funcao para o calculo do Carnaval // Retorna o dia do Carnaval no formato desejado ou false. // // ######################ATENCAO########################### // Esta funcao sofre das limitacoes de data de mktime()!!! // ######################################################## // // Possui dois parametros, ambos opcionais // ano = ano com quatro digitos // Padrao: ano atual // formato = formatacao da funcao date() http://br.php.net/date // Padrao: d/m/Y function dataCarnaval($ano=false, $form="d/m/Y") { $ano=$ano?$ano:date("Y"); $a=explode("/", dataPascoa($ano)); return date($form, mktime(0,0,0,$a[1],$a[0]-47,$a[2])); } // dataCorpusChristi(ano, formato); // Autor: Yuri Vecchi // // Funcao para o calculo do Corpus Christi // Retorna o dia do Corpus Christi no formato desejado ou false. // // ######################ATENCAO########################### // Esta funcao sofre das limitacoes de data de mktime()!!! // ######################################################## // // Possui dois parametros, ambos opcionais // ano = ano com quatro digitos // Padrao: ano atual // formato = formatacao da funcao date() http://br.php.net/date // Padrao: d/m/Y function dataCorpusChristi($ano=false, $form="d/m/Y") { $ano=$ano?$ano:date("Y"); $a=explode("/", dataPascoa($ano)); return date($form, mktime(0,0,0,$a[1],$a[0]+60,$a[2])); } // dataSextaSanta(ano, formato); // Autor: Yuri Vecchi // // Funcao para o calculo da Sexta-feira santa ou da Paixao. // Retorna o dia da Sexta-feira santa ou da Paixao no formato desejado ou false. // // ######################ATENCAO########################### // Esta funcao sofre das limitacoes de data de mktime()!!! // ######################################################## // // Possui dois parametros, ambos opcionais // ano = ano com quatro digitos // Padrao: ano atual // formato = formatacao da funcao date() http://br.php.net/date // Padrao: d/m/Y function dataSextaSanta($ano=false, $form="d/m/Y") { $ano=$ano?$ano:date("Y"); $a=explode("/", dataPascoa($ano)); return date($form, mktime(0,0,0,$a[1],$a[0]-2,$a[2])); } ?> bom pessoal foi meu primeiro post espero ter podido contribuir para o forum qq coisa é só postar Compartilhar este post Link para o post Compartilhar em outros sites
Robson Gregio 0 Denunciar post Postado Maio 18, 2009 Salve, salve... Muito bom o script... Abraços.. Robson Compartilhar este post Link para o post Compartilhar em outros sites
Elaine Naomi 0 Denunciar post Postado Maio 25, 2009 Muito bom o script!! Valeu!! ^_^ Compartilhar este post Link para o post Compartilhar em outros sites
Naelson 0 Denunciar post Postado Junho 28, 2009 Olá Faian, Primeiro, parabéns por este scrip. Gostaria de uma ajuda sua ou de outros membros, como eu coloco a chamada desta função na minha pagina, aonde eu coloco, no Input?, em qual parte do código eu coloco, pode ser usado com o dreamweaver developer toolbox. Um abraço Naelson Estava dando uma pesquisada na net sobre cálculos de dias úteis e o que consegui encontrar foi cálculos somente dos feriados ou de finais de semana, não achei nada que continha os dois, ai resolvi pegar os códigos que tinha achado e fiz isso. O calculo dos dias úteis retirando os finais de semana é criação do Leandro Vieira com contribuição de Anderson Mello já o calculo dos feriados moveis é criação de Yuri Vecchi. A junção dos dois é minha, rs... <?php include("feriado.php"); /* formas diferentes de usar a funcao 1- qdt de dias uteis a contar apartir de uma data especifica ou fixa você pode passar a data direto nos paremetros da funcao function somar_dias_uteis($str_data,$int_qtd_dias_somar = 7,$feriados) chamando a funcao somar_dias_uteis('09/04/2009','',''); ou $data = date('Y-m-d'); somar_dias_uteis('$data','',''); 2- nao precisa passar os dias como parametro da funcao tipo function somar_dias_uteis($str_data,$int_qtd_dias_somar,$feriados) para chamar a funcao fica somar_dias_uteis('09/04/2009','4',''); ou $data = date('Y-m-d'); somar_dias_uteis('$data','4',''); */ function somar_dias_uteis($str_data,$int_qtd_dias_somar,$feriados) { // 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))); } // chama a funcao que calcula a pascoa $pascoa_dt = dataPascoa(date('Y')); $aux_p = explode("/", $pascoa_dt); $aux_dia_pas = $aux_p[0]; $aux_mes_pas = $aux_p[1]; $pascoa = "$aux_mes_pas"."-"."$aux_dia_pas"; // crio uma data somente como mes e dia // chama a funcao que calcula o carnaval $carnaval_dt = dataCarnaval(date('Y')); $aux_carna = explode("/", $carnaval_dt); $aux_dia_carna = $aux_carna[0]; $aux_mes_carna = $aux_carna[1]; $carnaval = "$aux_mes_carna"."-"."$aux_dia_carna"; // chama a funcao que calcula corpus christi $CorpusChristi_dt = dataCorpusChristi(date('Y')); $aux_cc = explode("/", $CorpusChristi_dt); $aux_cc_dia = $aux_cc[0]; $aux_cc_mes = $aux_cc[1]; $Corpus_Christi = "$aux_cc_mes"."-"."$aux_cc_dia"; // chama a funcao que calcula a sexta feira santa $sexta_santa_dt = dataSextaSanta(date('Y')); $aux = explode("/", $sexta_santa_dt); $aux_dia = $aux[0]; $aux_mes = $aux[1]; $sexta_santa = "$aux_mes"."-"."$aux_dia"; $feriados = array("01-01", $carnaval, $sexta_santa, $pascoa, $Corpus_Christi, "04-21", "05-01", "06-12" ,"07-09", "07-16", "09-07", "10-12", "11-02", "11-15", "12-24", "12-25", "12-31"); $array_data = explode('-', $str_data); $count_days = 0; $int_qtd_dias_uteis = 0; while ( $int_qtd_dias_uteis < $int_qtd_dias_somar ) { $count_days++; $day = date('m-d',strtotime('+'.$count_days.'day',strtotime($str_data))); if(($dias_da_semana = gmdate('w', strtotime('+'.$count_days.' day', gmmktime(0, 0, 0, $array_data[1], $array_data[2], $array_data[0]))) ) != '0' && $dias_da_semana != '6' && !in_array($day,$feriados)) { $int_qtd_dias_uteis++; } } return gmdate('d/m/Y',strtotime('+'.$count_days.' day',strtotime($str_data))); } somar_dias_uteis('09/04/2009','',''); ?> cria um outro arquivo chamado feriado.php <?php // dataPascoa(ano, formato); // Autor: Yuri Vecchi // // Funcao para o calculo da Pascoa // Retorna o dia da pascoa no formato desejado ou false. // // ######################ATENCAO########################### // Esta funcao sofre das limitacoes de data de mktime()!!! // ######################################################## // // Possui dois parametros, ambos opcionais // ano = ano com quatro digitos // Padrao: ano atual // formato = formatacao da funcao date() http://br.php.net/date // Padrao: d/m/Y function dataPascoa($ano=false, $form="d/m/Y") { $ano=$ano?$ano:date("Y"); if ($ano<1583) { $A = ($ano % 4); $B = ($ano % 7); $C = ($ano % 19); $D = ((19 * $C + 15) % 30); $E = ((2 * $A + 4 * $B - $D + 34) % 7); $F = (int)(($D + $E + 114) / 31); $G = (($D + $E + 114) % 31) + 1; return date($form, mktime(0,0,0,$F,$G,$ano)); } else { $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($form, mktime(0,0,0,$P,$Q,$ano)); } } // dataCarnaval(ano, formato); // Autor: Yuri Vecchi // // Funcao para o calculo do Carnaval // Retorna o dia do Carnaval no formato desejado ou false. // // ######################ATENCAO########################### // Esta funcao sofre das limitacoes de data de mktime()!!! // ######################################################## // // Possui dois parametros, ambos opcionais // ano = ano com quatro digitos // Padrao: ano atual // formato = formatacao da funcao date() http://br.php.net/date // Padrao: d/m/Y function dataCarnaval($ano=false, $form="d/m/Y") { $ano=$ano?$ano:date("Y"); $a=explode("/", dataPascoa($ano)); return date($form, mktime(0,0,0,$a[1],$a[0]-47,$a[2])); } // dataCorpusChristi(ano, formato); // Autor: Yuri Vecchi // // Funcao para o calculo do Corpus Christi // Retorna o dia do Corpus Christi no formato desejado ou false. // // ######################ATENCAO########################### // Esta funcao sofre das limitacoes de data de mktime()!!! // ######################################################## // // Possui dois parametros, ambos opcionais // ano = ano com quatro digitos // Padrao: ano atual // formato = formatacao da funcao date() http://br.php.net/date // Padrao: d/m/Y function dataCorpusChristi($ano=false, $form="d/m/Y") { $ano=$ano?$ano:date("Y"); $a=explode("/", dataPascoa($ano)); return date($form, mktime(0,0,0,$a[1],$a[0]+60,$a[2])); } // dataSextaSanta(ano, formato); // Autor: Yuri Vecchi // // Funcao para o calculo da Sexta-feira santa ou da Paixao. // Retorna o dia da Sexta-feira santa ou da Paixao no formato desejado ou false. // // ######################ATENCAO########################### // Esta funcao sofre das limitacoes de data de mktime()!!! // ######################################################## // // Possui dois parametros, ambos opcionais // ano = ano com quatro digitos // Padrao: ano atual // formato = formatacao da funcao date() http://br.php.net/date // Padrao: d/m/Y function dataSextaSanta($ano=false, $form="d/m/Y") { $ano=$ano?$ano:date("Y"); $a=explode("/", dataPascoa($ano)); return date($form, mktime(0,0,0,$a[1],$a[0]-2,$a[2])); } ?> bom pessoal foi meu primeiro post espero ter podido contribuir para o forum qq coisa é só postar Compartilhar este post Link para o post Compartilhar em outros sites
GCONTABIL 0 Denunciar post Postado Março 18, 2016 Faian, Inicialmente gostaria de parabenizá-lo pelo Script, realmente muito bom. Neste script teria como fazer outra função que se a Data Inicial + Prazo = Data Final (se esta data final cair-se no final de semana ou feriado) fosse passada a Data Final para o 1º dias útil seguinte?? Desde já agradeço. Estou precisando deste script para calculo dois tipo de prazo sendo um em dias úteis e outro em dias corridos, mais se for final de semana ou feriado passe para o primeiro dia util. Att. Gilson Compartilhar este post Link para o post Compartilhar em outros sites