Calculo de datas

Delphi

14/10/2010

Pessoal estou com um problema aqui bem achei q seria facil mas porem preciso calcular os dias de férias de funcionarios entre datas e m retornar o dia porem me bati com um porblema se eu so diminuir as das datas e pegar a diferencia eu achei q iria dar a data correto mas porem nao m retor correto por exemplo:

se eu pegar as data dessa forma 01/10/2010 - 30/10/2010 ele m retorna 29 dias porem isso esta errado pq um mes tem 30 dias

esse esta sendo meu problema se eu for tirar férias nesse periodo 01/10/2010 - 30/10/2010 o resultado teria q ser 30 pq eu vou sair no dia 01 até o dia 30...

entao como posso resolver isso to doido ja olhei na net e nao vi nada....
Laelson Fagundes

Laelson Fagundes

Curtidas 0

Respostas

Leonardo Xavier

Leonardo Xavier

14/10/2010

Porque você na pega o ultimo dia de cada mês e diminui pelos dias que você quer, por exemplo 30/09/2010 - 30/11/2010.
GOSTEI 0
Laelson Fagundes

Laelson Fagundes

14/10/2010

Porque é um controle de férias eu tenho que informar a data que o funconario vai sair de férias até a data que ele vai ficar ausente da empresa...

então tenho q informar a data correta se eu sair no dia 01/10/2010 a 30/10/2010 terei q informar essa data...

não dessa forma q vc deu exemplo
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

14/10/2010

Perai não é pegar a data que inicia as férias e somar o número de dias que ele vai tirar?
GOSTEI 0
Wilson Junior

Wilson Junior

14/10/2010

é simples, veja:

DataInicio = 01/10/2010
DiasFerias = 30
DataRetorno = DataInicio + DiasFerias - 1 (este menos um é para contar o primeiro dia de férias)

Espero ter colaborado.
GOSTEI 0
Wilson Junior

Wilson Junior

14/10/2010

Ah, caso você saiba a datas e quer saber a quantidade de dias, veja:

DataInicio  = 01/10/2010
DataRetorno = 30/10/2010
DiasFerias  = DataRetorno - DataInicio + 1 (este mais um é para contar o primeiro dia de férias)

Espero ter colaborado.
GOSTEI 0
Laelson Fagundes

Laelson Fagundes

14/10/2010

Aqui vai ser da seguinte forma a data de inicio e a data final e vai m dar a quantidade de dias q o funcionario vai ficar fora

bom fiz um quebra galho aqui

dataIn - dataFim+1

dessa forma funcionou mas naos ei c é a correta...
GOSTEI 0
Laelson Fagundes

Laelson Fagundes

14/10/2010

Aqui vai ser da seguinte forma a data de inicio e a data final e vai m dar a quantidade de dias q o funcionario vai ficar fora

bom fiz um quebra galho aqui

dataIn - dataFim+1

dessa forma funcionou mas naos ei c é a correta...
GOSTEI 0
Wilson Junior

Wilson Junior

14/10/2010

Isto não é um quebra galho, e sim, um cálculo utilizado para saber a quantidades de dias, pois se utilizar a diferença (soma ou subtração) das datas ele nunca conta o primeiro, ou último, dia em questão.

Este tipo de cálculo tem diversas utilizadades, como cálculo para MRP, Folha de Pagamento, etc., poderia passar horas escrevendo em várias coisas na qual é utilizado.

Espero ter colaborado.
GOSTEI 0
David Carvalho

David Carvalho

14/10/2010

Amigao, para calcular o tempo de servico vc precisa fazer o seguinte

pegar o periodo inicial e subtrair com o final em uma data decodificada

dia mes ano Final
01 04 2012
dia mes ano Inicial
10 05 2011
----------------
09 01 1 resultado

ou seja tenho 1 1 mes e 9 dias

ai vem a magica

ano * 12
+ mes
---------
13
se dias >= 15 entao
13 + 1 = 14 meses

dai se for calculo de rescisao, na formula da vencida, paga 12 e a sobra é proporcional :D
segue minha formula


DecodeDate(pvUltFerias,AnoIni,MesIni,DiaIni); -- aqui data de admissao ou ultimas ferias
DecodeDate(pvFim,AnoFim,MesFim,DiaFim); -- aqui fim do periodo ou data da demissao

MesesAno := ( AnoFim - AnoIni ) * 12 ;
Meses := ( MesFim - MesIni ) ;

if Meses < 0 Then
Meses := Meses * -1 ;

Meses := Meses + MesesAno ;

DiaIni := DiaIni - 1 ;

Dias := DiaFim - DiaIni;

if Dias < 0 Then
Dias := Dias * -1 ;

if ( Dias >= 15 ) Then
Meses := Meses + 1 ;

Result := Meses ;




GOSTEI 0
POSTAR