Página 1 de 1

Função com data

Enviado: 11 Dez 2004 20:10
por carlos.sc
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

Re: Função com data

Enviado: 12 Dez 2004 09:58
por Maligno
carlos.sc escreveu: sera que alguem tem pra me arrumar ou dar alguma dica pra eu fazer???
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.
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

Enviado: 12 Dez 2004 10:18
por Jorge Adourian
Tente esta função:

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 dias
Obs: A ADDMONTH() é da CA-TOOLS.

Enviado: 17 Dez 2004 10:14
por rcurval
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