Sv Community El Salvador
Soporte y Tecnología => Programación => Mensaje iniciado por: Trance en agosto 31, 2007, 10:47:37 am
-
*-----------------------------------------------------
* FUNCTION Dif_AMD(tdIni, tdFin)
*-----------------------------------------------------
* Calcula la diferencia entre dos fechas en:
* años, meses y días
* Usa la función DiasDelMes()
*-----------------------------------------------------
fecha1 = cTOD('17/09/2002')
fecha2 = CTOD('17/09/2011')
MESSAGEBOX(Dif_amd(fecha1,fecha2))
FUNCTION Dif_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))+ " DIAS."+;
ALLTRIM(STR((lnAnio*12+lnmes)))
**aqui esta para q solo te retorne los meses
LcRet = ALLTRIM(STR((lnAnio*12+lnmes)))
RETURN lcRet
ENDFUNC
*-----------------------------------------------------
* FUNCTION DiasDelMes(dFecha)
*------------------------------------------------
* Retorna los días de un mes. Usada por Dif_AMD
*------------------------------------------------
FUNCTION DiasDelMes(dFecha)
LOCAL ld
ld = GOMONTH(dFecha,1)
RETURN DAY(ld - DAY(ld))
ENDFUNC
Copyleft rcguillen
-
Gracias Trance...
Cualquier onda de fox (tengo varios codigos para diferentes cosas) o SQL hay avisan....
Saludos
-
Buen codigo :thumbsup:, para la coleccion
-
Buen codigo :thumbsup:, para la coleccion
y aqui esta Ramses q es la mera mengambrella el V.basic.net
-
y aqui esta Ramses q es la mera mengambrella el V.basic.net
Jejeje no es para tanto, todavia estoy aprendiendo :D
-
tiene un pequeño Bug ...
con años bisiestos.. toy viendo como lo arreglo
-
tiene un pequeño Bug ...
con años bisiestos.. toy viendo como lo arreglo
Excelente Sicario ahi pasas ya el codigo con el fix..
-
fecha1 = cTOD('31/12/2006')
fecha2 = CTOD('28/02/2012')
mira con estas dos fechas... se pela un poquitin..
-
fecha1 = cTOD('31/12/2006')
fecha2 = CTOD('28/02/2012')
mira con estas dos fechas... se pela un poquitin..
Sicario a mi me da 61 meses...y asi es porque aun no ha terminado el mes...
deseas q lo incluya aunque no haya terminado el mes osea q si va por el dia 1 q ya lo tome como mes?
siendo asi ya tendrian q ser 62 meses
o como?....
-
jajja guillen ... no es que no ha terminado... lo que pasa es que es febrero.. y es bisiesto.. si me captas?
-
jajja guillen ... no es que no ha terminado... lo que pasa es que es febrero.. y es bisiesto.. si me captas?
jaja simon ya vas....bueno seguile buscando ahi..q ahorita aqui anda mi jefe y me quiere dar en la neck jajajaaj