Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: Bazooka en Febrero 10, 2015, 07:54:52 pm
-
Hola chicos tengo esta funcion que me devuelve la Edad pero advierto un error en ella fijense por favor a ver si esta mal o que pasa
Private Sub Command1_Click()
MsgBox Edad("10/02/1994") 'DEVUELVE 21
MsgBox Edad("09/02/1994") 'DEVUELVE 21 Y DEBERIA DEVOLVER 20 POR QUE TODAVIA hoy es 10/02/2015 NO SE HA CUMPLIDO
End Sub
Private Function Edad(valor As String) As String
Dim e As Single, a As Integer, m As Integer
e = DateDiff("m", valor, Now) / 12
a = Int(e)
Edad = a
End Function
-
Hola, si el DateDif me creo el mismo problema como a vos hace poco esta probando sobre fechas para un reporte encontre esta funcion y me va bien.
Option Explicit
Function anosMesesDias(fechaInicio As Date, _
fechaFin As Date) As String
Dim anos, meses, dias, m As Integer
anos = Year(fechaFin) - Year(fechaInicio)
If Month(fechaInicio) > Month(fechaFin) Then
anos = anos - 1
End If
If Month(fechaFin) < Month(fechaInicio) Then
meses = 12 - Month(fechaInicio) + Month(fechaFin)
Else
meses = Month(fechaFin) - Month(fechaInicio)
End If
If Day(fechaFin) < Day(fechaInicio) Then
meses = meses - 1
If Month(fechaFin) = Month(fechaInicio) Then
anos = anos - 1
meses = 11
End If
End If
dias = Day(fechaFin) - Day(fechaInicio)
If dias < 0 Then
m = CInt(Month(fechaFin)) - 1
If m = 0 Then
m = 12
End If
Select Case m
Case 1, 3, 5, 7, 8, 10, 12
dias = 31 + dias
Case 4, 6, 9, 11
dias = 30 + dias
Case 2
If (Year(fechaFin) Mod 4 = 0 And _
Year(fechaFin) Mod 100 <> 0) _
Or Year(fechaFin) Mod 400 = 0 Then
dias = 29 + dias
Else
dias = 28 + dias
End If
End Select
End If
anosMesesDias = CStr(anos) + " años, " + CStr(meses) _
+ " meses, " + CStr(dias) + " días "
End Function
Como Usar
Private Sub Command1_Click()
MsgBox anosMesesDias(CDate("01-01-2000"), Now)
End Sub
Fuente: http://www.ajpdsoft.com/modules.php?name=Foros&file=viewtopic&t=898 (http://www.ajpdsoft.com/modules.php?name=Foros&file=viewtopic&t=898)
Otros Ejemplos.
http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico5.htm#fecha-hora (http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico5.htm#fecha-hora)
http://es.kioskea.net/forum/affich-194090-calculo-fecha-en-visual-basic (http://es.kioskea.net/forum/affich-194090-calculo-fecha-en-visual-basic)
-
Hola, si el DateDif me creo el mismo problema como a vos hace poco esta probando sobre fechas para un reporte encontre esta funcion y me va bien.
Option Explicit
Function anosMesesDias(fechaInicio As Date, _
fechaFin As Date) As String
Dim anos, meses, dias, m As Integer
anos = Year(fechaFin) - Year(fechaInicio)
If Month(fechaInicio) > Month(fechaFin) Then
anos = anos - 1
End If
If Month(fechaFin) < Month(fechaInicio) Then
meses = 12 - Month(fechaInicio) + Month(fechaFin)
Else
meses = Month(fechaFin) - Month(fechaInicio)
End If
If Day(fechaFin) < Day(fechaInicio) Then
meses = meses - 1
If Month(fechaFin) = Month(fechaInicio) Then
anos = anos - 1
meses = 11
End If
End If
dias = Day(fechaFin) - Day(fechaInicio)
If dias < 0 Then
m = CInt(Month(fechaFin)) - 1
If m = 0 Then
m = 12
End If
Select Case m
Case 1, 3, 5, 7, 8, 10, 12
dias = 31 + dias
Case 4, 6, 9, 11
dias = 30 + dias
Case 2
If (Year(fechaFin) Mod 4 = 0 And _
Year(fechaFin) Mod 100 <> 0) _
Or Year(fechaFin) Mod 400 = 0 Then
dias = 29 + dias
Else
dias = 28 + dias
End If
End Select
End If
anosMesesDias = CStr(anos) + " años, " + CStr(meses) _
+ " meses, " + CStr(dias) + " días "
End Function
Como Usar
Private Sub Command1_Click()
MsgBox anosMesesDias(CDate("01-01-2000"), Now)
End Sub
Fuente: http://www.ajpdsoft.com/modules.php?name=Foros&file=viewtopic&t=898 (http://www.ajpdsoft.com/modules.php?name=Foros&file=viewtopic&t=898)
Otros Ejemplos.
http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico5.htm#fecha-hora (http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico5.htm#fecha-hora)
http://es.kioskea.net/forum/affich-194090-calculo-fecha-en-visual-basic (http://es.kioskea.net/forum/affich-194090-calculo-fecha-en-visual-basic)
PERO HAY ALGO QUE NO FUNCIONA O YO LO INTERPRETO MAL ESTA QUE ME PASAS ME DA EL MISMO PROBLEMA SI LA LLAMO ASI!
Caption = anosMesesDias("01-02-1994", Now)
Me devuelve 21 años, 0 meses, 10 días y son 20 años 11 meses y 10 dias por que 21 años seria a partir de la fecha de HOY EN ADELANTE.
S.O.S please
-
Yo lo que entiendo ahí es que solo esta restando el año
Ejemplo 2015 - 1994 = 21
Sin importar los meses.
Lo que podes hacer es maquilar o algo asi yo lo hice esta forma no justamente lo que vos queres pero podes probarlos.
En un Timer
Private Sub Timer1_Timer()
On Error Resume Next
Dim año As Integer
Dim mes As Integer
Dim dia As Integer
Dim xaño As String
Dim xmes As String
Dim xdia As String
año = Mid$(anosMesesDias(CDate(Text1.Text), Now), 1, 4)
mes = Mid$(anosMesesDias(CDate(Text1.Text), Now), 5, 2)
dia = Mid$(anosMesesDias(CDate(Text1.Text), Now), 7, 2)
If Val(año) <= 0 Then
xaño = ""
Else
xaño = año & " años "
End If
If Val(mes) <= 0 Then
xmes = ""
Else
If Val(mes) > 1 Then
xmes = mes & " meses "
Else
xmes = mes & " mes "
End If
End If
If Val(dia) <= 0 Then
xdia = ""
Else
xdia = dia & " dias"
End If
If xaño = "" And xmes = "" And xdia = "" Then
Command1.Caption = "Algunas Horas..."
Else
Command1.Caption = xaño & xmes & xdia
End If
End Sub
-
Aca esta otro ejemplo, este si funciona.
Function Calcular_Edad(Fecha_Nacimiento As Variant) As Integer
Dim Años As Variant
' comprueba si el valor no es nulo
If IsNull(Fecha_Nacimiento) Then
Calcular_Edad = 0
Exit Function
End If
Años = DateDiff("yyyy", Fecha_Nacimiento, Now)
If Date < DateSerial(Year(Now), Month(Fecha_Nacimiento), Day(Fecha_Nacimiento)) Then
Años = Años - 1
End If
Calcular_Edad = CInt(Años)
End Function
Private Sub Command2_Click()
Dim fecha As Date
fecha = "11/02/1994"
' le pasa la fecha de nacimiento como parámetro
MsgBox Calcular_Edad(fecha), vbInformation, fecha
End Sub
-
No hay caso sigo con problemas! para mi no es exacto este asunto por que hay que tener en cuenta los biciestos!
-
A ver si alguien me echa una mano con esto por favor aca les dejo un ejemplo sencillo para que me entiendan perfectamente cual es mi problema.
Fuente:
https://dl.dropboxusercontent.com/u/53113728/ESQUELETO%20CONEXION.rar (https://dl.dropboxusercontent.com/u/53113728/ESQUELETO%20CONEXION.rar)
Quiero mostrar la edad en una columna a partir de la fecha de nacimiento que esta en la BD.
Bien al cargar de la base se llama a la función que me paso el amigo Enter para calcular la Edad y fijense los valores que me devuelve en mi sistema y ver si a UD s les muestra lo mismo.
Este es mi resultado
(http://snag.gy/wBMn6.jpg)
-
Yo lo hago así. Fijate si te sirve de algo.
Dim Edad As Double
Dim Dia As Byte
Dim Mes As Byte
Dim Año As Integer
Dim Fecha As Date
Dim FechaNacimiento As String
FechaNacimiento = "01-01-1990"
Dia = Day(Date)
Mes = Month(Date)
Año = Year(Date)
Fecha = CDate(Dia & "/" & Mes & "/" & Año - 1)
Edad = DateDiff("yyyy", FechaNacimiento, Fecha)
If FechaNacimiento > CDate(Dia & "/" & Mes & "/" & Year(FechaNacimiento)) Then
' Edad = Edad
Else
Edad = Edad + 1
End If
-
Hola, proba con la funcion que está aca:
http://www.fmsinc.com/microsoftaccess/modules/examples/agecalculation.asp (http://www.fmsinc.com/microsoftaccess/modules/examples/agecalculation.asp)
La copio aca por las dudas:
Public Function AgeYears(ByVal datBirthDate As Date) As Integer
' Comments: Returns the age in years
' Params : datBirthDate Date to check
' Returns : Number of years
' Source : Total Visual SourceBook
On Error GoTo PROC_ERR
Dim intYears As Integer
intYears = Year(Now) - Year(datBirthDate)
If DateSerial(Year(Now), Month(datBirthDate), Day(datBirthDate)) > Now Then
' Subtract a year if birthday hasn't arrived this year
intYears = intYears - 1
End If
AgeYears = intYears
PROC_EXIT:
Exit Function
PROC_ERR:
MsgBox "Error: " & Err.Number & ". " & Err.Description, , "AgeYears"
Resume PROC_EXIT
End Function
Lo probé con mi fecha de nacimiento y funciona perfecto!
Private Sub Form_Load()
Dim CurrentAge As Integer
CurrentAge = AgeYears(#8/11/1992#)
MsgBox "The current age is: " & vbCrLf & CurrentAge
' Devuelve 22, lo cual es correcto
End Sub
Saludos
-
Gracias chicos mañana pruebo esto y comento.
-
Hola, proba con la funcion que está aca:
http://www.fmsinc.com/microsoftaccess/modules/examples/agecalculation.asp (http://www.fmsinc.com/microsoftaccess/modules/examples/agecalculation.asp)
Hola Coco !! no no hay caso ya prove muchisimas y no hay caso! todas me devuelven un valor erroneo para mi es una cuestion de los años Biciestos!
Prova esta por favor y decime si estoy equivocado yo hoy siendo 13/02/2015 la pruebo de esta manera:
CurrentAge = AgeYears(#13/02/1994#) y me devuelve 21 (CORRECTO!!)
Y asi
CurrentAge = AgeYears(#12/02/1994#) y devuelve 21 (FALSO TODABIA NO SE CUMPLIO)
aun asi!!
CurrentAge = AgeYears(#12/01/1994#) y devuelve 21 (FALSO TODABIA NO SE CUMPLIO)
POR FAVOR SI LA PRUEBAN Y ME DICE SI LES DEVUELVE LO MISMO QUE A MI !
-
aun asi!!
CurrentAge = AgeYears(#12/01/1994#) y devuelve 21 (FALSO TODABIA NO SE CUMPLIO)
En ese caso está bien que devuelva 21, porque la persona cumplió años el mes pasado.
Yo lo probé con la función que te pasé y me da siempre bien.
La función es la siguiente:
Private Function CalcularEdad(ByVal FechaNacimiento As String)
Dim Edad As Double
Dim Dia As Byte
Dim Mes As Byte
Dim Año As Integer
Dim Fecha As Date
Dia = Day(Date)
Mes = Month(Date)
Año = Year(Date)
Fecha = CDate(Dia & "/" & Mes & "/" & Año - 1)
Edad = DateDiff("yyyy", FechaNacimiento, Fecha)
If FechaNacimiento > CDate(Dia & "/" & Mes & "/" & Year(FechaNacimiento)) Then
' Edad = Edad
Else
Edad = Edad + 1
End If
CalcularEdad = Edad
End Function
Y la llamé de esta manera (hoy es 13-02-2015):
MsgBox CalcularEdad("12-02-1994") & vbCrLf & CalcularEdad("13-02-1994") & vbCrLf & CalcularEdad("14-02-1994") & vbCrLf & CalcularEdad("14-01-1994")
Jerónimo
-
Jerónimo
Asi te da a Ti ??
Fijate como me da !!
Esta mal
(http://snag.gy/lIW4X.jpg)
-
No entiendo qué está mal.
El argumento que se pasa a la función es la fecha de nacimiento de la persona.
Una persona que nació el 12 de febrero de 1994, el 12 de febrero de 2015 cumplió 21 años. Por ende, hoy, 13 de febrero de 2015, tiene 21 años. Si hubiera nacido el 13 de febrero de 1994 sería el mismo caso. Ahora, si hubiera nacido el 14, hoy tendría 20 años.
Estoy medio mareado porque estoy con mucho trabajo, pero creo haber hecho bien las cuentas. O tal vez no... :P
Saludos.
Jerónimo
-
12-02-1994 (hoy es 13/02/15)
Ayer fue su cumpleaños!!!! festejó y bebió hasta tarde, esta feliz porque tiene 21 años.
13-02-1994 (hoy es 13/02/15)
Hoy es su cumpleaños!!!! hoy festejará y beberá hasta tarde PERO HOY, esta feliz porque ya tiene 21 años. Normalmente queda irrelevante la hora en que nació para querer ser mas preciso, en todo caso faltaría ese dato ¿a que hora nació?
14-02-1994 (hoy es 13/02/15)
Mañana es su cumpleaños!!!! tranquilo muchacho que aun tienes 20.
Entonces concuerdo con Jeronimo.
Saludos
-
No entiendo qué está mal.
El argumento que se pasa a la función es la fecha de nacimiento de la persona.
Una persona que nació el 12 de febrero de 1994, el 12 de febrero de 2015 cumplió 21 años. Por ende, hoy, 13 de febrero de 2015, tiene 21 años. Si hubiera nacido el 13 de febrero de 1994 sería el mismo caso. Ahora, si hubiera nacido el 14, hoy tendría 20 años.
Estoy medio mareado porque estoy con mucho trabajo, pero creo haber hecho bien las cuentas. O tal vez no... :P
Saludos.
Jerónimo
SI TIENES RAZON AMIGO PERDON ESTABA ENREDADO COMO PATO CON TRIPAS !!!
Y LO ESTABA ANALIZANDO DE UN PUNTO DE VISTA ERRONEO.
GRACIAS !!!
-
Para eso estamos, amigo.
No revisé la manera en que lo hacías vos. Tal vez esté funcionando bien y lo que no andaba era el análisis "enredado". ;)
Saludos.
Jerónimo