Amigos...
to precisando urgente de uma função com data que me traz resultado de mes e dia :
data 1 = 11/12/2004
data 2 = 16/01/2005 resultado: data2-data1= 1 mes e 5 dias
data 1 = 11/12/2004 data 2 = 25/12/2005
resultado: data2-data1 = 12 mes e 15 dias..
sera que alguem tem pra me arrumar ou dar alguma dica pra eu fazer???
grato
carlao - S.CARLOS
Função com data
Moderador: Moderadores
Re: Função com data
Imagino que você já saiba que o Clipper já tem incorporado o recurso de cálculo de datas. Assim, data2-data1, no formato DATE, é possível. O resultado, naturalmente, será um valor numérico que representa a quantidade de dias.carlos.sc escreveu: sera que alguem tem pra me arrumar ou dar alguma dica pra eu fazer???
Mas você quer que o resultado seja expresso em quantidade de meses e, havendo resto, em dias. Isso é possível, mas não ficará muito certo, uma vez que temos meses com 28, 29, 30 e 31 dias. Portanto, se quiser o resultado em meses, você terá de convencionar, ou fixar, que um mês terá sempre 30 dias, por exemplo. Só assim será possível. E não ficará muito certo, como eu disse, porque, se o resultado for, por exemplo, 6 meses, não serão de fato 6 meses. É fácil perceber isso.
Agora, se lhe servir, apenas divida a quantidade de dias que o Clipper lhe fornecer por 30. Havendo resto, será o adicional em dias.
[]'s
Maligno
http://www.buzinello.com/prg
-
Jorge Adourian
- Usuário Nível 2

- Mensagens: 95
- Registrado em: 05 Jul 2004 23:38
- Localização: São Paulo-SP-Brasil
- Contato:
Tente esta função:
Obs: A ADDMONTH() é da CA-TOOLS.
Código: Selecionar todos
Use assim:
? xxx(data_menor, data_maior,@meses) && o número de dias
? meses && o número de meses
function xxx(data1,data2,meses)
local dias
meses:=int((data2-data1)/30)
dias:=data2-addmonth(data1,meses)
return diasAté...
Jorge Adourian
Clipper5.2e, Blinker7.0, SIX2(NSX), ADS7.1, FW2.3c, PrintFile2.1.5 e PDFCreator0.8.0(2)
Jorge Adourian
Clipper5.2e, Blinker7.0, SIX2(NSX), ADS7.1, FW2.3c, PrintFile2.1.5 e PDFCreator0.8.0(2)
Tente a seguinte funcao.
set date briti
CLEAR
SET CENTURY ON
DATA1:=DATA2:=DATE()
@ 12,12 GET DATA1
@ 13,12 GET DATA2
READ
DIA_MES:={31,28,31,30,31,30,31,31,30,31,30,31}
IF MONTH(DATA1)=MONTH(DATA2)
MESES:=0
DIAS:=DATA2-DATA1
ELSE
IF MONTH(DATA2)<MONTH(DATA1)
MESES:=MONTH(DATA2)-MONTH(DATA1)+11
ELSE
MESES:=MONTH(DATA2)-MONTH(DATA1)+0
ENDIF
IF DAY(DATA2)<DAY(DATA1)
DIAS:=( DIA_MES[if(MONTH(DATA2)=1,12,MONTH(DATA2)-1)]-DAY(DATA1))+ DAY(DATA2)
ELSE
MESES:=MESES+1
DIAS:=DAY(DATA2)-DAY(DATA1)
ENDIF
ENDIF
@ 20,10 SAY "MESES "+STR(MESES,2)+ " DIAS:"+STR(DIAS,4)
*** valido somente para um ano
*** Se dia da data2 < dia data 2 ,entao ele conta do dia do mes anterior até o fim do mes anterior + os dias do mes da data2
Bcurval
set date briti
CLEAR
SET CENTURY ON
DATA1:=DATA2:=DATE()
@ 12,12 GET DATA1
@ 13,12 GET DATA2
READ
DIA_MES:={31,28,31,30,31,30,31,31,30,31,30,31}
IF MONTH(DATA1)=MONTH(DATA2)
MESES:=0
DIAS:=DATA2-DATA1
ELSE
IF MONTH(DATA2)<MONTH(DATA1)
MESES:=MONTH(DATA2)-MONTH(DATA1)+11
ELSE
MESES:=MONTH(DATA2)-MONTH(DATA1)+0
ENDIF
IF DAY(DATA2)<DAY(DATA1)
DIAS:=( DIA_MES[if(MONTH(DATA2)=1,12,MONTH(DATA2)-1)]-DAY(DATA1))+ DAY(DATA2)
ELSE
MESES:=MESES+1
DIAS:=DAY(DATA2)-DAY(DATA1)
ENDIF
ENDIF
@ 20,10 SAY "MESES "+STR(MESES,2)+ " DIAS:"+STR(DIAS,4)
*** valido somente para um ano
*** Se dia da data2 < dia data 2 ,entao ele conta do dia do mes anterior até o fim do mes anterior + os dias do mes da data2
Bcurval

