Cálculo de la edad

12/05/2010 - 18:37 por MADIAZ | Informe spam
Hola a todos.

Necesito calcular el cumpleaños, bueno, realmente los cumpleaños de
los clientes en los próximos siguientes días, he encontrado una
función en internet, pero no me funciona: Int((DATE()-{12/05/2009})/
365.2425) en teoría me devolvería 0 si hoy es el cumpleaños, pero no
tiene en cuenta los años bisiestos y el cálculo evidentemente es
erróneo.

Alguien me puede ayudar, por favor.

Gracias anticipadas
Miguel Ángel Díaz.

Preguntas similare

Leer las respuestas

#6 Carlos Yohn Zubiria
12/05/2010 - 23:22 | Informe spam
Y ¿por qué no gomonth(nacimiento, años*12)?
Los años se sacarían restando el año actual del de nacimiento.
Dividir entre 365.25 fallará cuando llegue el 2100 porque no será bisiesto a
pesar de ser múltiplo de 4.


Saludos,
A.G.P. (Aplicaciones de Gestión y Productividad)
Las Arenas - Vizcaya - España

"MADIAZ" escribió en el mensaje
news:
Hola a todos.

Necesito calcular el cumpleaños, bueno, realmente los cumpleaños de
los clientes en los próximos siguientes días, he encontrado una
función en internet, pero no me funciona: Int((DATE()-{12/05/2009})/
365.2425) en teoría me devolvería 0 si hoy es el cumpleaños, pero no
tiene en cuenta los años bisiestos y el cálculo evidentemente es
erróneo.

Alguien me puede ayudar, por favor.

Gracias anticipadas
Miguel Ángel Díaz.
Respuesta Responder a este mensaje
#7 Daniel Burgos
13/05/2010 - 01:17 | Informe spam
Hola Miguel Angel...
ésta formula calcula edades:

old_dec=sys(2001,'DECIMAL')
set decimal to 4
anios=int((dton(date())-dton(TUFECHA))/10000)
set decimal to (old_dec)

function dton
parameter d_tmp
return val(dtos(d_tmp))

Si es para averiguar con day() y month() iguales a tu day() y month() de la
fecha a buscar estaria bien

Saludos
Daniel Burgos
Mar del Plata
Argentina
Respuesta Responder a este mensaje
#8 Luis Maria Guayan
13/05/2010 - 02:07 | Informe spam
http://www.portalfox.com/article.php?sidc

Esta otra función si queres los años, meses y días

? Diferencia_AMD(DATE(1964,10,07), DATE())

FUNCTION Diferencia_AMD(tdIni, tdFin)
LOCAL ldAux, lnAnio, lnMes, lnDia, lcRet
* Fecha inicial siempre menor
IF tdIni > tdFin
ldAux = tdIni
tdIni = tdFin
tdFin = ldAux
ENDIF
lnAnio = YEAR(tdFin) - YEAR(tdIni)
ldAux = GOMONTH(tdIni, 12 * lnAnio)
* No cumplio el año aun
IF ldAux > tdFin
lnAnio = lnAnio - 1
ENDIF
lnMes = MONTH(tdFin) - MONTH(tdIni)
IF lnMes < 0
lnMes = lnMes + 12
ENDIF
lnDia = DAY(tdFin) - DAY(tdIni)
IF lnDia < 0
lnDia = lnDia + DiasDelMes(tdIni)
ENDIF
* Si el dia es mayor, no cumplio el mes
IF (DAY(tdFin) < DAY(tdIni))
IF lnMes = 0
lnMes = 11
ELSE
lnMes = lnMes - 1
ENDIF
ENDIF
lcRet = ALLTRIM(STR(lnAnio))+ " años, " + ;
ALLTRIM(STR(lnMes))+ " meses y " + ;
ALLTRIM(STR(lnDia))+ " días"
RETURN lcRet
ENDFUNC

FUNCTION DiasDelMes(tdFecha)
LOCAL ld
ld = GOMONTH(tdFecha,1)
RETURN DAY(ld - DAY(ld))
ENDFUNC

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


El 12/05/2010 13:37, MADIAZ escribió:
Hola a todos.

Necesito calcular el cumpleaños, bueno, realmente los cumpleaños de
los clientes en los próximos siguientes días, he encontrado una
función en internet, pero no me funciona: Int((DATE()-{12/05/2009})/
365.2425) en teoría me devolvería 0 si hoy es el cumpleaños, pero no
tiene en cuenta los años bisiestos y el cálculo evidentemente es
erróneo.

Alguien me puede ayudar, por favor.

Gracias anticipadas
Miguel Ángel Díaz.
Respuesta Responder a este mensaje
#9 MADIAZ
22/05/2010 - 22:26 | Informe spam
On 13 mayo, 02:07, Luis Maria Guayan
wrote:

Esta otra función si queres los años, meses y días

? Diferencia_AMD(DATE(1964,10,07), DATE())

FUNCTION Diferencia_AMD(tdIni, tdFin)
   LOCAL ldAux, lnAnio, lnMes, lnDia, lcRet
   * Fecha inicial siempre menor
   IF tdIni > tdFin
     ldAux = tdIni
     tdIni = tdFin
     tdFin = ldAux
   ENDIF
   lnAnio = YEAR(tdFin) - YEAR(tdIni)
   ldAux = GOMONTH(tdIni, 12 * lnAnio)
   * No cumplio el año aun
   IF ldAux > tdFin
     lnAnio = lnAnio - 1
   ENDIF
   lnMes = MONTH(tdFin) - MONTH(tdIni)
   IF lnMes < 0
     lnMes = lnMes + 12
   ENDIF
   lnDia = DAY(tdFin) - DAY(tdIni)
   IF lnDia < 0
     lnDia = lnDia + DiasDelMes(tdIni)
   ENDIF
   * Si el dia es mayor, no cumplio el mes
   IF (DAY(tdFin) < DAY(tdIni))
     IF lnMes = 0
       lnMes = 11
     ELSE
       lnMes = lnMes - 1
     ENDIF
   ENDIF
   lcRet = ALLTRIM(STR(lnAnio))+ " años, " + ;
     ALLTRIM(STR(lnMes))+ " meses y " + ;
     ALLTRIM(STR(lnDia))+ " días"
   RETURN lcRet
ENDFUNC

FUNCTION DiasDelMes(tdFecha)
   LOCAL ld
   ld = GOMONTH(tdFecha,1)
   RETURN DAY(ld - DAY(ld))
ENDFUNC

Luis María Guayán
Tucumán, Argentina
_________________________http://www.PortalFox.com
Nada corre como un zorro
_________________________

El 12/05/2010 13:37, MADIAZ escribió:

> Hola a todos.

> Necesito calcular el cumpleaños, bueno, realmente los cumpleaños de
> los clientes en los próximos siguientes días, he encontrado una
> función en internet, pero no me funciona: Int((DATE()-{12/05/2009})/
> 365.2425) en teoría me devolvería 0 si hoy es el cumpleaños, pero no
> tiene en cuenta los años bisiestos y el cálculo evidentemente es
> erróneo.

> Alguien me puede ayudar, por favor.

> Gracias anticipadas
> Miguel Ángel Díaz.



Gracias a todos, me habéis ayudado mucho.

Saludos desde España
Miguel Ángel.
Respuesta Responder a este mensaje
#10 aldrin
24/05/2010 - 14:27 | Informe spam
Por que da esto????

? Diferencia_AMD(DATE()-1, DATE())

0 años, 11 meses y 30 días.

?????????????????????????????????


El 22/05/2010 17:26, MADIAZ escribió:
On 13 mayo, 02:07, Luis Maria Guayan
wrote:

Esta otra función si queres los años, meses y días

? Diferencia_AMD(DATE(1964,10,07), DATE())

FUNCTION Diferencia_AMD(tdIni, tdFin)
LOCAL ldAux, lnAnio, lnMes, lnDia, lcRet
* Fecha inicial siempre menor
IF tdIni> tdFin
ldAux = tdIni
tdIni = tdFin
tdFin = ldAux
ENDIF
lnAnio = YEAR(tdFin) - YEAR(tdIni)
ldAux = GOMONTH(tdIni, 12 * lnAnio)
* No cumplio el año aun
IF ldAux> tdFin
lnAnio = lnAnio - 1
ENDIF
lnMes = MONTH(tdFin) - MONTH(tdIni)
IF lnMes< 0
lnMes = lnMes + 12
ENDIF
lnDia = DAY(tdFin) - DAY(tdIni)
IF lnDia< 0
lnDia = lnDia + DiasDelMes(tdIni)
ENDIF
* Si el dia es mayor, no cumplio el mes
IF (DAY(tdFin)< DAY(tdIni))
IF lnMes = 0
lnMes = 11
ELSE
lnMes = lnMes - 1
ENDIF
ENDIF
lcRet = ALLTRIM(STR(lnAnio))+ " años, " + ;
ALLTRIM(STR(lnMes))+ " meses y " + ;
ALLTRIM(STR(lnDia))+ " días"
RETURN lcRet
ENDFUNC

FUNCTION DiasDelMes(tdFecha)
LOCAL ld
ld = GOMONTH(tdFecha,1)
RETURN DAY(ld - DAY(ld))
ENDFUNC

Luis María Guayán
Tucumán, Argentina
_________________________http://www.PortalFox.com
Nada corre como un zorro
_________________________

El 12/05/2010 13:37, MADIAZ escribió:

Hola a todos.



Necesito calcular el cumpleaños, bueno, realmente los cumpleaños de
los clientes en los próximos siguientes días, he encontrado una
función en internet, pero no me funciona: Int((DATE()-{12/05/2009})/
365.2425) en teoría me devolvería 0 si hoy es el cumpleaños, pero no
tiene en cuenta los años bisiestos y el cálculo evidentemente es
erróneo.



Alguien me puede ayudar, por favor.



Gracias anticipadas
Miguel Ángel Díaz.





Gracias a todos, me habéis ayudado mucho.

Saludos desde España
Miguel Ángel.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida