Ir para conteúdo

POWERED BY:

Arquivado

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

Naelson

Contar dias entre datas (feriados)

Recommended Posts

Olá a todos,Mais uma vez venho solicitar o auxilio de voces.Preciso contar os dias uteis entre duas datas, OK.como chamar esta função.Estou usando esta chamada.CalcDiasVencto((Edital_DOE), (Resposta))Edital_DOE e Resposta são campos da tabela:mais recebo esta mensagem:---------------------------Project1---------------------------'Edital_DOE' is not a valid date.---------------------------OK---------------------------Desde já agradeçoUm abraçoNaelson-----------Fiz uma função que retorna a diferença entre dias descontando se o dia do vencimento é sábado, domingo ou feriado (WEBER).Talvez de para aproveitar em seu código.Código:function CalcDiasVencto(DtAtual, DtVencto: ShortString): Integer;vardDtTemp: TDateTime;function VerFeriados(DtAtual, DtVencto: ShortString): Boolean;varAno, Mes, Dia: Currency;c,n,k,i,j,l: Currency;cFeriados: TStringList;dDtTemp: TDateTime;nI, nY: Integer;beginAno := StrToInt(Trim(Copy(DtAtual,7,4)));c := Trunc(Ano / 100);n := Ano - (19 * Trunc(Ano / 19));k := Trunc((c - 17) / 25);i := c - Trunc((c/4)) - Trunc((c-k)/3) + (19*n) + 15;i := i - (30*Trunc(i/30));i := i - (Trunc(i/2Cool*(1-Trunc(i/2Cool)*Trunc(29/(i+1))*Trunc((21-n)/11));j := Ano + Trunc(Ano / 4) + i + 2 -c + Trunc(c/4);j := j - (7*Trunc(j/7));l := i - j;Mes := 3 + Trunc((l+40)/44);Dia := l + 28 - (31*Trunc(Mes/4));cFeriados := TStringList.Create;cFeriados.Add(FormatDateTime('dd/mm',StrToDate(CurrToStr(Dia)+'/'+CurrToStr(Mes)))); //PascoacFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]), -2))); //6.SantacFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]),-47))); //CarnavalcFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]), 60))); //Corpus CrhistcFeriados.Add('01/01'); //Ano NovocFeriados.Add('21/04'); //TiradentescFeriados.Add('01/05'); //TrabalhocFeriados.Add('07/09'); //IndenpenciacFeriados.Add('12/10'); //N.SenhoracFeriados.Add('02/11'); //FinadoscFeriados.Add('15/11'); //ReplublicacFeriados.Add('25/12'); //NatalcFeriados.Add('10/05'); //Aniversario de MaringacFeriados.Add('15/08'); //Padroeira de MaringadDtTemp := StrToDate(DtAtual);dDtTemp := IncDay(dDtTemp, -1);while dDtTemp >= StrToDate(DtVencto) do //domingos e sabadoif (DayOfWeek(dDtTemp) = 7) or (DayOfWeek(dDtTemp) = 1) thenbegincFeriados.Add(FormatDateTime('dd/mm',dDtTemp));dDtTemp := IncDay(dDtTemp, -1);endelseBreak;Result := False;dDtTemp := StrToDate(DtVencto);for nI := 0 to cFeriados.Count -1 doif cFeriados[nI] = FormatDateTime('dd/mm',dDtTemp) thenbeginfor nY := 0 to cFeriados.Count -1 doif cFeriados[nY] = FormatDateTime('dd/mm',IncDay(StrToDate(DtAtual), -1)) thenbeginResult := True;Break;end;if Result thenBreak;end;cFeriados.Free;end;beginResult := DaysBetween(StrToDate(DtAtual), StrToDate(DtVencto));if StrToDate(DtAtual) <= StrToDate(DtVencto) thenResult := 0elsebegindDtTemp := StrToDate(DtVencto);while StrToDate(DtAtual) > dDtTemp dobeginif VerFeriados(DtAtual,DateToStr(dDtTemp)) thenbeginResult := Result - 1;dDtTemp := IncDay(dDtTemp, 1);endelseBreak;end;end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá a todos,Consegui executar esta função, só que ela me retorna sempre '0' zero, poderiam me dar uma mão.Ficou assim a chamada:Um abraço a todosNaelsonprocedure TForm1.RespostaExit(Sender: TObject);begin CalcDiasVencto((Edital_DOE.Field.AsString), (Resposta.Field.AsString)); Table1PrazoRetornoAR.AsInteger := CalcDiasVencto((Edital_DOE.Field.AsString), (Resposta.Field.AsString));end;----

Olá a todos,Mais uma vez venho solicitar o auxilio de voces.Preciso contar os dias uteis entre duas datas, OK.como chamar esta função.Estou usando esta chamada.CalcDiasVencto((Edital_DOE), (Resposta))Edital_DOE e Resposta são campos da tabela:mais recebo esta mensagem:---------------------------Project1---------------------------'Edital_DOE' is not a valid date.---------------------------OK---------------------------Desde já agradeçoUm abraçoNaelson-----------Fiz uma função que retorna a diferença entre dias descontando se o dia do vencimento é sábado, domingo ou feriado (WEBER).Talvez de para aproveitar em seu código.Código:function CalcDiasVencto(DtAtual, DtVencto: ShortString): Integer;vardDtTemp: TDateTime;function VerFeriados(DtAtual, DtVencto: ShortString): Boolean;varAno, Mes, Dia: Currency;c,n,k,i,j,l: Currency;cFeriados: TStringList;dDtTemp: TDateTime;nI, nY: Integer;beginAno := StrToInt(Trim(Copy(DtAtual,7,4)));c := Trunc(Ano / 100);n := Ano - (19 * Trunc(Ano / 19));k := Trunc((c - 17) / 25);i := c - Trunc((c/4)) - Trunc((c-k)/3) + (19*n) + 15;i := i - (30*Trunc(i/30));i := i - (Trunc(i/2Cool*(1-Trunc(i/2Cool)*Trunc(29/(i+1))*Trunc((21-n)/11));j := Ano + Trunc(Ano / 4) + i + 2 -c + Trunc(c/4);j := j - (7*Trunc(j/7));l := i - j;Mes := 3 + Trunc((l+40)/44);Dia := l + 28 - (31*Trunc(Mes/4));cFeriados := TStringList.Create;cFeriados.Add(FormatDateTime('dd/mm',StrToDate(CurrToStr(Dia)+'/'+CurrToStr(Mes)))); //PascoacFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]), -2))); //6.SantacFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]),-47))); //CarnavalcFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]), 60))); //Corpus CrhistcFeriados.Add('01/01'); //Ano NovocFeriados.Add('21/04'); //TiradentescFeriados.Add('01/05'); //TrabalhocFeriados.Add('07/09'); //IndenpenciacFeriados.Add('12/10'); //N.SenhoracFeriados.Add('02/11'); //FinadoscFeriados.Add('15/11'); //ReplublicacFeriados.Add('25/12'); //NatalcFeriados.Add('10/05'); //Aniversario de MaringacFeriados.Add('15/08'); //Padroeira de MaringadDtTemp := StrToDate(DtAtual);dDtTemp := IncDay(dDtTemp, -1);while dDtTemp >= StrToDate(DtVencto) do //domingos e sabadoif (DayOfWeek(dDtTemp) = 7) or (DayOfWeek(dDtTemp) = 1) thenbegincFeriados.Add(FormatDateTime('dd/mm',dDtTemp));dDtTemp := IncDay(dDtTemp, -1);endelseBreak;Result := False;dDtTemp := StrToDate(DtVencto);for nI := 0 to cFeriados.Count -1 doif cFeriados[nI] = FormatDateTime('dd/mm',dDtTemp) thenbeginfor nY := 0 to cFeriados.Count -1 doif cFeriados[nY] = FormatDateTime('dd/mm',IncDay(StrToDate(DtAtual), -1)) thenbeginResult := True;Break;end;if Result thenBreak;end;cFeriados.Free;end;beginResult := DaysBetween(StrToDate(DtAtual), StrToDate(DtVencto));if StrToDate(DtAtual) <= StrToDate(DtVencto) thenResult := 0elsebegindDtTemp := StrToDate(DtVencto);while StrToDate(DtAtual) > dDtTemp dobeginif VerFeriados(DtAtual,DateToStr(dDtTemp)) thenbeginResult := Result - 1;dDtTemp := IncDay(dDtTemp, 1);endelseBreak;end;end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá a todos,Alguem pode me ajudar.Um abralo a todosNaelson

Olá a todos,Consegui executar esta função, só que ela me retorna sempre '0' zero, poderiam me dar uma mão.Ficou assim a chamada:Um abraço a todosNaelsonprocedure TForm1.RespostaExit(Sender: TObject);begin CalcDiasVencto((Edital_DOE.Field.AsString), (Resposta.Field.AsString)); Table1PrazoRetornoAR.AsInteger := CalcDiasVencto((Edital_DOE.Field.AsString), (Resposta.Field.AsString));end;----

Olá a todos,Mais uma vez venho solicitar o auxilio de voces.Preciso contar os dias uteis entre duas datas, OK.como chamar esta função.Estou usando esta chamada.CalcDiasVencto((Edital_DOE), (Resposta))Edital_DOE e Resposta são campos da tabela:mais recebo esta mensagem:---------------------------Project1---------------------------'Edital_DOE' is not a valid date.---------------------------OK---------------------------Desde já agradeçoUm abraçoNaelson-----------Fiz uma função que retorna a diferença entre dias descontando se o dia do vencimento é sábado, domingo ou feriado (WEBER).Talvez de para aproveitar em seu código.Código:function CalcDiasVencto(DtAtual, DtVencto: ShortString): Integer;vardDtTemp: TDateTime;function VerFeriados(DtAtual, DtVencto: ShortString): Boolean;varAno, Mes, Dia: Currency;c,n,k,i,j,l: Currency;cFeriados: TStringList;dDtTemp: TDateTime;nI, nY: Integer;beginAno := StrToInt(Trim(Copy(DtAtual,7,4)));c := Trunc(Ano / 100);n := Ano - (19 * Trunc(Ano / 19));k := Trunc((c - 17) / 25);i := c - Trunc((c/4)) - Trunc((c-k)/3) + (19*n) + 15;i := i - (30*Trunc(i/30));i := i - (Trunc(i/2Cool*(1-Trunc(i/2Cool)*Trunc(29/(i+1))*Trunc((21-n)/11));j := Ano + Trunc(Ano / 4) + i + 2 -c + Trunc(c/4);j := j - (7*Trunc(j/7));l := i - j;Mes := 3 + Trunc((l+40)/44);Dia := l + 28 - (31*Trunc(Mes/4));cFeriados := TStringList.Create;cFeriados.Add(FormatDateTime('dd/mm',StrToDate(CurrToStr(Dia)+'/'+CurrToStr(Mes)))); //PascoacFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]), -2))); //6.SantacFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]),-47))); //CarnavalcFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]), 60))); //Corpus CrhistcFeriados.Add('01/01'); //Ano NovocFeriados.Add('21/04'); //TiradentescFeriados.Add('01/05'); //TrabalhocFeriados.Add('07/09'); //IndenpenciacFeriados.Add('12/10'); //N.SenhoracFeriados.Add('02/11'); //FinadoscFeriados.Add('15/11'); //ReplublicacFeriados.Add('25/12'); //NatalcFeriados.Add('10/05'); //Aniversario de MaringacFeriados.Add('15/08'); //Padroeira de MaringadDtTemp := StrToDate(DtAtual);dDtTemp := IncDay(dDtTemp, -1);while dDtTemp >= StrToDate(DtVencto) do //domingos e sabadoif (DayOfWeek(dDtTemp) = 7) or (DayOfWeek(dDtTemp) = 1) thenbegincFeriados.Add(FormatDateTime('dd/mm',dDtTemp));dDtTemp := IncDay(dDtTemp, -1);endelseBreak;Result := False;dDtTemp := StrToDate(DtVencto);for nI := 0 to cFeriados.Count -1 doif cFeriados[nI] = FormatDateTime('dd/mm',dDtTemp) thenbeginfor nY := 0 to cFeriados.Count -1 doif cFeriados[nY] = FormatDateTime('dd/mm',IncDay(StrToDate(DtAtual), -1)) thenbeginResult := True;Break;end;if Result thenBreak;end;cFeriados.Free;end;beginResult := DaysBetween(StrToDate(DtAtual), StrToDate(DtVencto));if StrToDate(DtAtual) <= StrToDate(DtVencto) thenResult := 0elsebegindDtTemp := StrToDate(DtVencto);while StrToDate(DtAtual) > dDtTemp dobeginif VerFeriados(DtAtual,DateToStr(dDtTemp)) thenbeginResult := Result - 1;dDtTemp := IncDay(dDtTemp, 1);endelseBreak;end;end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá a todos,Alguem pode me ajudar.Um abralo a todosNaelson

Olá a todos,Consegui executar esta função, só que ela me retorna sempre '0' zero, poderiam me dar uma mão.Ficou assim a chamada:Um abraço a todosNaelsonprocedure TForm1.RespostaExit(Sender: TObject);begin CalcDiasVencto((Edital_DOE.Field.AsString), (Resposta.Field.AsString)); Table1PrazoRetornoAR.AsInteger := CalcDiasVencto((Edital_DOE.Field.AsString), (Resposta.Field.AsString));end;----

Olá a todos,Mais uma vez venho solicitar o auxilio de voces.Preciso contar os dias uteis entre duas datas, OK.como chamar esta função.Estou usando esta chamada.CalcDiasVencto((Edital_DOE), (Resposta))Edital_DOE e Resposta são campos da tabela:mais recebo esta mensagem:---------------------------Project1---------------------------'Edital_DOE' is not a valid date.---------------------------OK---------------------------Desde já agradeçoUm abraçoNaelson-----------Fiz uma função que retorna a diferença entre dias descontando se o dia do vencimento é sábado, domingo ou feriado (WEBER).Talvez de para aproveitar em seu código.Código:function CalcDiasVencto(DtAtual, DtVencto: ShortString): Integer;vardDtTemp: TDateTime;function VerFeriados(DtAtual, DtVencto: ShortString): Boolean;varAno, Mes, Dia: Currency;c,n,k,i,j,l: Currency;cFeriados: TStringList;dDtTemp: TDateTime;nI, nY: Integer;beginAno := StrToInt(Trim(Copy(DtAtual,7,4)));c := Trunc(Ano / 100);n := Ano - (19 * Trunc(Ano / 19));k := Trunc((c - 17) / 25);i := c - Trunc((c/4)) - Trunc((c-k)/3) + (19*n) + 15;i := i - (30*Trunc(i/30));i := i - (Trunc(i/2Cool*(1-Trunc(i/2Cool)*Trunc(29/(i+1))*Trunc((21-n)/11));j := Ano + Trunc(Ano / 4) + i + 2 -c + Trunc(c/4);j := j - (7*Trunc(j/7));l := i - j;Mes := 3 + Trunc((l+40)/44);Dia := l + 28 - (31*Trunc(Mes/4));cFeriados := TStringList.Create;cFeriados.Add(FormatDateTime('dd/mm',StrToDate(CurrToStr(Dia)+'/'+CurrToStr(Mes)))); //PascoacFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]), -2))); //6.SantacFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]),-47))); //CarnavalcFeriados.Add(FormatDateTime('dd/mm',IncDay(StrToDate(cFeriados[0]), 60))); //Corpus CrhistcFeriados.Add('01/01'); //Ano NovocFeriados.Add('21/04'); //TiradentescFeriados.Add('01/05'); //TrabalhocFeriados.Add('07/09'); //IndenpenciacFeriados.Add('12/10'); //N.SenhoracFeriados.Add('02/11'); //FinadoscFeriados.Add('15/11'); //ReplublicacFeriados.Add('25/12'); //NatalcFeriados.Add('10/05'); //Aniversario de MaringacFeriados.Add('15/08'); //Padroeira de MaringadDtTemp := StrToDate(DtAtual);dDtTemp := IncDay(dDtTemp, -1);while dDtTemp >= StrToDate(DtVencto) do //domingos e sabadoif (DayOfWeek(dDtTemp) = 7) or (DayOfWeek(dDtTemp) = 1) thenbegincFeriados.Add(FormatDateTime('dd/mm',dDtTemp));dDtTemp := IncDay(dDtTemp, -1);endelseBreak;Result := False;dDtTemp := StrToDate(DtVencto);for nI := 0 to cFeriados.Count -1 doif cFeriados[nI] = FormatDateTime('dd/mm',dDtTemp) thenbeginfor nY := 0 to cFeriados.Count -1 doif cFeriados[nY] = FormatDateTime('dd/mm',IncDay(StrToDate(DtAtual), -1)) thenbeginResult := True;Break;end;if Result thenBreak;end;cFeriados.Free;end;beginResult := DaysBetween(StrToDate(DtAtual), StrToDate(DtVencto));if StrToDate(DtAtual) <= StrToDate(DtVencto) thenResult := 0elsebegindDtTemp := StrToDate(DtVencto);while StrToDate(DtAtual) > dDtTemp dobeginif VerFeriados(DtAtual,DateToStr(dDtTemp)) thenbeginResult := Result - 1;dDtTemp := IncDay(dDtTemp, 1);endelseBreak;end;end;end;

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.