Visual Basic.NET - RESTAR fechas en años, meses y dias

 
Vista:

RESTAR fechas en años, meses y dias

Publicado por Eduardo Yuptón C. (41 intervenciones) el 18/06/2007 19:35:24
HOLA AMIGOS:

Cómo puedo hacer para restar dos fechas seleccionadas de dos objetos DateTimePicker
y el resultado sea en "a Años, m Meses y d dias". Ejemplo:

---------------------------------------------
dim fecha1, fecha2 as date
periodo as string

fecha1=DateTimePicker1.value
fecha2=DateTimePicker1.value

'aqui proceso de resta

periodo = [resultado de proceso de resta de fecha2 y fecha1]
--------------------------------------------

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:RESTAR fechas en años, meses y dias

Publicado por OliBeer (1 intervención) el 18/06/2007 22:29:44
Hay algo más o menos así:

diferencia = DateDiff(DateInterval.Day, UltimaFecha, Date.Today)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:RESTAR fechas en años, meses y dias

Publicado por Eduardo Yuptón C. (41 intervenciones) el 18/06/2007 23:50:27
Muchas Gracias, pero eso sólo me devuelve los dias...

Yo necesito que me devuelva en:

"a años m meses, d dias"

Ejemplo:

f1=20/03/2005
f2=28/06/2007

resta=f2-f1

necesito: resta= "2 años, 3 meses, 8 dias"

TENGO UNA IDEA Y VOYA EMPEZAR A PARTIR DE DIAS APLICANDO MATEMATICA OBTENIENDO POR SEPARADO AÑOS, MESES Y DIAS

A VER SI HAY UN METODO MAS FACIL

GRACIAS AMIGOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

YA TENGO LA SOLUCION, LA COMPARTO

Publicado por Eduardo Yuptón C. (41 intervenciones) el 19/06/2007 02:35:53
ESPERO LE SIRVA A ALGUIEN:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Dim años, meses, dias, dias_sobran As Integer
Dim años_str, meses_str, dias_str As String
Dim PriFec As Date = Me.dtpFechaIngreso.Value
Dim SecFec As Date = Me.dtpFechaCese.Value
Dim DiasTotales As Long = DateDiff(DateInterval.Day, PriFec, SecFec)
años = DiasTotales \ 365
dias_sobran = DiasTotales Mod 365
meses = dias_sobran \ 30
dias = dias_sobran Mod 30
If (años > 0) Then
	años_str = años & " año(s) "
Else
	años_str = ""
End If
If (meses > 0) Then
	meses_str = meses & " mes(es) "
Else
	meses_str = ""
End If
If (dias > 0) Then
	dias_str = dias & " dia(s)"
Else
	dias_str = ""
End If
txtperiodo.Text = Trim(años_str & meses_str & dias_str)
'txtperiodo.Text = años & " año(s), " & meses & " mes(es), " & dias & " dia(s)"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias

Publicado por jonan (1 intervención) el 06/11/2008 22:33:31
Hola por casualidad encontre esta pagina, pues necesitava la opcion para restar pero las horas
Todo lo q hice es cambiar DateDiff(DateInterval.Day, PriFec, SecFec) por
DateDiff(DateInterval.Second, PriFec, SecFec)
Gracias por el dato me sirvio mucho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:YA TENGO LA SOLUCION, LA COMPARTO

Publicado por Hernan Erazo (1 intervención) el 04/12/2008 03:52:43
otro punto de vista

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Dim gnDias As Integer
Dim gnAnios As Integer
Dim gnMeses As Integer
Dim gdfecha1 As Date
Dim gnDia1 As Integer
Dim gnMes1 As Integer
Dim gnNuevaFecha As Date
 
gdfecha1 = CDate("01/02/1972")
gnDia1 = Microsoft.VisualBasic.Day(gdfecha1)
gnMes1 = Month(gdfecha1)
 
gnAnios = DateDiff(DateInterval.Year, gdfecha1, Now())
gnMeses = DateDiff(DateInterval.Month, gdfecha1, Now())
gnMeses = gnMeses - 12 * gnAnios
gnNuevaFecha = CDate(Str(gnDia1) + "/" + Str(gnMeses + gnMes1) + "/" + Str(Year(Now)))
gnDias = DateDiff(DateInterval.Day, gnNuevaFecha, Now())
 
MsgBox(gnAnios)
MsgBox(gnMeses)
MsgBox(gnDias)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:YA TENGO LA SOLUCION, LA COMPARTO

Publicado por Alexis (1 intervención) el 27/05/2010 17:47:28
fecha de ayer = CDate(Today.Date.Year & "/" & Today.Date.Month & "/" & Today.Day - 1)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:YA TENGO LA SOLUCION, LA COMPARTO

Publicado por RayoPunk (3 intervenciones) el 20/02/2015 21:21:48
muchas gracias ya implemente tu respuesta asi con un datatimepickter para restarle un año muchas gracias de verdad
ojala a alguien le pueda ayudar



DtptboFIni.Value = CDate(Today.Date.Year - 1 & "/" & Today.Date.Month & "/" & Today.Day)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:YA TENGO LA SOLUCION, LA COMPARTO

Publicado por Carlos SIlva (1 intervención) el 23/03/2016 17:55:09
Te agradezco tu aporte, muchas gracias...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:RESTAR fechas en años, meses y dias

Publicado por pancho (1 intervención) el 28/08/2007 16:47:44
1
2
3
4
5
6
7
8
9
10
11
12
Public Class clValidacion
    Public vEdad, vDias As Integer
    Public RangoFecha As Date
 
    Public Sub gEdad(ByVal Fecha As Date)
        vEdad = DateDiff(DateInterval.Year, Now, Fecha)
    End Sub
 
    Public Sub gDias(ByVal Fecha As Date)
        vDias = DateDiff(DateInterval.Day, Now, Fecha)
    End Sub
End Class

espero que te sirva cao...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:RESTAR fechas en años, meses y dias

Publicado por BENEDICTO ALVAREZ (1 intervención) el 12/08/2015 16:40:37
pues buscando no encontre una solucion que me diera una respuesta convincente todas las soluciones las hacen en base a aproximaciones y calculos automaticos pero no son reales, aqui tengo una solucion que es real.


notas:
label4 es donde muestro el resultado
DateTimePicker1 y DateTimePicker2 es donde consigo las fechas a comparar.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
Private Sub seteodeprimerapagina()
        If DateTimePicker1.Value > DateTimePicker2.Value Then
            Me.Label4.Text = "Error - en fechas"
        Else
            Dim FECHA3, NewDateTime As Date
            Dim ANNO1, ANNO2, MES1, MES2, DIA1, DIA2, CANANNO, CANMES, CANDIA As Integer
 
            FECHA3 = DateTimePicker1.Value
            ANNO1 = DateAndTime.Year(DateTimePicker1.Value)
            ANNO2 = DateAndTime.Year(DateTimePicker2.Value)
            MES1 = DateAndTime.Month(DateTimePicker1.Value)
            MES2 = DateAndTime.Month(DateTimePicker2.Value)
            DIA1 = DateAndTime.Day(DateTimePicker1.Value)
            DIA2 = DateAndTime.Day(DateTimePicker2.Value)
 
            Select Case ANNO2
                Case > ANNO1
                    Select Case MES2
                        Case >= MES1
                            CANANNO = ANNO2 - ANNO1
                            Select Case DIA2
                                Case >= DIA1
                                    CANMES = MES2 - MES1
                                    CANDIA = DIA2 - DIA1
                                Case < DIA1
                                    CANMES = 0
                                    If MES1 = 12 Then
                                        NewDateTime = New Date(ANNO1 + 1, MES1, 1)
                                    Else
                                        NewDateTime = New Date(ANNO1, MES1 + 1, 1)
                                    End If
                                    CANDIA = DateAndTime.DateDiff(DateInterval.Day, FECHA3, NewDateTime) + DIA2
                            End Select
                        Case < MES1
                            CANANNO = (ANNO2 - ANNO1) - 1
                            CANMES = (12 - MES1) + MES2
                            Select Case DIA2
                                Case >= DIA1
                                    CANDIA = DIA2 - DIA1
                                Case < DIA1
                                    If MES1 = 12 Then
                                        NewDateTime = New Date(ANNO1 + 1, MES1, 1)
                                    Else
                                        NewDateTime = New Date(ANNO1, MES1 + 1, 1)
                                    End If
                                    CANDIA = DateAndTime.DateDiff(DateInterval.Day, FECHA3, NewDateTime) + DIA2
                            End Select
                    End Select
                Case = ANNO1
                    CANANNO = 0
 
                    Select Case DIA2
                        Case >= DIA1
                            CANMES = MES2 - MES1
                            CANDIA = DIA2 - DIA1
                        Case < DIA1
                            CANMES = 0
                            If MES1 = 12 Then
                                NewDateTime = New Date(ANNO1 + 1, MES1, 1)
                            Else
                                NewDateTime = New Date(ANNO1, MES1 + 1, 1)
                            End If
                            CANDIA = DateAndTime.DateDiff(DateInterval.Day, FECHA3, NewDateTime) + DIA2
                    End Select
            End Select
 
            Me.Label4.Text = ""
            If CANANNO > 0 Then
                Me.Label4.Text = CType(CANANNO, String)
                If CANANNO > 1 Then
                    Me.Label4.Text = Me.Label4.Text + " Años"
                Else
                    Me.Label4.Text = Me.Label4.Text + " Año"
                End If
            End If
 
            If CANANNO > 0 And CANMES > 0 Then
                Me.Label4.Text = Me.Label4.Text + " - "
            End If
 
            If CANMES > 0 Then
                Me.Label4.Text = Me.Label4.Text + CType(CANMES, String)
                If CANMES > 1 Then
                    Me.Label4.Text = Me.Label4.Text + " Meses"
                Else
                    Me.Label4.Text = Me.Label4.Text + " Mes"
                End If
            End If
 
            If CANMES > 0 And CANDIA > 0 Then
                Me.Label4.Text = Me.Label4.Text + " - "
 
            Else
                If CANANNO > 0 And CANDIA > 0 Then
                    Me.Label4.Text = Me.Label4.Text + " - "
                End If
 
            End If
 
            If CANDIA > 0 Then
                Me.Label4.Text = Me.Label4.Text + CType(CANDIA, String)
                If CANDIA > 1 Then
                    Me.Label4.Text = Me.Label4.Text + " Dias"
                Else
                    Me.Label4.Text = Me.Label4.Text + " Dia"
                End If
            End If
 
        End If
 
    End Sub


Espero les ayude se que no esta optimizada por que estoy empezando a aprender visual basic pero se que a mas de alguien sacara de problemas ya que a mi ninguna solucion me sirvio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar