web-dev-qa-db-fra.com

Obtenir la différence de date dans VB.NET

Je souhaite obtenir la différence entre deux dates choisies par deux sélecteurs de date, années, mois et jours dans des zones de texte distinctes.

J'ai essayé:

txtyrs.text = datediff(datetimepicker1,datetimepicker2)

Ça ne marche pas.

7
ghost21blade

Quelques calculs doivent être faits et ensuite,

dim ts as TimeSpan = dtpicker1.value - dtpicker.value
dim days, months, years as integer
months = 12*(dtp1.value.year - dtp2.value.year) (dtp1.value.month-dtp2.value.month)

... Plus

0
ghost21blade

Essaye ça:

Dim date1 As Date = Date.Now
Dim date2 As Date = date1.AddDays(4.0#)

Dim span = date2 - date1

Dim days As Double = span.TotalDays '=4

Et si vous voulez extraire les années, jetez un œil à cet article.

7

Utilisation:

datediff(interval, date1, date2);

Par exemple: intervalle peut être jour, mois, année, heures, secondes, etc. Il soustrait date1 à date2.

Entrez date1 et date2 dans Dateformat.

Format: DateDiff(DateInterval.Day, Now.Date, Now.AddDays(4).Date)

Sortie: 4

4
Manik G
Dim D1 as Date = Now 
Dim D2 as Date = D1.AddDays(10) 
Dim difference As
TimeSpan = D2.Subtract(D1) 
msgBox(“{0} Days”, difference.TotalDays) 'THIS WILL RETURN Total No. of Days
2
Sikandar Amla

Quelque chose comme ça devrait marcher:

    Dim dateOne = DateTimePicker1.Value
    Dim dateTwo = DateTimePicker2.Value
    Dim diff As TimeSpan = dateTwo.Subtract(dateOne)
    Dim years As Double = diff.TotalDays / 365
    txtyrs.Text = years.ToString
    txtmonsh.Text = (years * 12).ToString
    txtdays.Text = diff.TotalDays.ToString
2
tinstaafl

À l'aide de DateDiff, vous l'appelez avec différents paramètres d'intervalle de date pour extraire la valeur appropriée:

 Dim D1, D2 As Date
    D1 = Date.Now
    D2 = #11/9/2004#
    'DateDiff
    Console.WriteLine("DateDiff")
    Console.WriteLine()
    Console.WriteLine("{0} Days", _
        DateDiff(DateInterval.Day, D1, D2))
    Console.WriteLine("{0} Hours", _
        DateDiff(DateInterval.Hour, D1, D2))
    Console.WriteLine("{0} Minutes", _
        DateDiff(DateInterval.Minute, D1, D2))
    Console.WriteLine("{0} Seconds", _
        DateDiff(DateInterval.Second, D1, D2))
    Console.WriteLine()

Vous pouvez également extraire une structure TimeSpan après avoir soustrait une date à une autre, puis interrogé les différents membres de cette structure.

Console.WriteLine("TimeSpan")
    Console.WriteLine()
    Dim difference As TimeSpan = D2.Subtract(D1)
    Console.WriteLine("{0} Days", difference.TotalDays)
    Console.WriteLine("{0} Hours", difference.TotalHours)
    Console.WriteLine("{0} Minutes", difference.TotalMinutes)
    Console.WriteLine("{0} Seconds", difference.TotalSeconds)
    Console.WriteLine()

La sortie des deux méthodes différentes est presque identique, sauf que les propriétés TimeSpan retournent Doubles, alors que DateDiff renvoie toujours Longs (Int64).

DateDiff

175 jours

4222 heures

253345 minutes

15200730 secondes

TimeSpan

175.934383644387 Jours

4222.42520746528 Heures

253345.512447917 Minutes

15200730.746875 secondes

1

Utilisez TimeSpan et certains calculs de date, cela devrait fonctionner:

Dim offset = New Date(1, 1, 1)
Dim dateOne = DateTimePicker1.Value
Dim dateTwo = DateTimePicker2.Value
Dim diff As TimeSpan = dateTwo - dateOne
Dim years = (offset + diff).Year - 1
Dim months = (dateTwo.Month - dateOne.Month) + 12 * (dateTwo.Year - dateOne.Year)
Dim days = diff.Days
TxtYear.Text = years.ToString
TxtMonth.Text = months.ToString
TxtDays.Text = days.ToString
1
Rango

J'ai modifié votre code pour que vous puissiez le comprendre facilement.

Essaye ça:

txtyrs.text = DateDiff(DateInterval.Day, datetimepicker1.value,datetimepicker2.value)

J'espère que c'est ça. Si quelque chose ne va pas ou encore déroutant, informez-moi.

1
Muj

Essaye ça:

txtyrs.text=datediff(DateInterval.Year,datetimepicker1,datetimepicker2).ToString()

En supposant que datetimepicker1 et datetimepicker2 sont de type DateTime. Sinon, vous devez obtenir leurs valeurs respectives DateTime et les utiliser à la place.

1
Douglas Barbin

J'ai créé cette fonction avec l'option facultative EndDate avec celle par défaut. J'ai ajouté la fonction zéro à l'heure.

Public Shared Function Zero(ByVal Number As Integer) As String
    If Number < 10 Then
        Return "0" & Number.ToString
    Else
        Return Number.ToString
    End If
End Function

Public Shared Function TimeDifference(ByVal StartDate As DateTime, Optional ByVal EndDate As DateTime = Nothing) As String
    If EndDate = Nothing Then
        EndDate = Date.Now()
    End If
    Dim timediff As TimeSpan
    If EndDate > StartDate Then
        timediff = EndDate - StartDate
        Return timediff.Days & ":" & Zero(timediff.Hours) & ":" & Zero(timediff.Minutes) & ":" & Zero(timediff.Seconds)
    Else
        timediff = StartDate - EndDate
        Return timediff.Days & ":" & Zero(timediff.Hours) & ":" & Zero(timediff.Minutes) & ":" & Zero(timediff.Seconds)
    End If
End Function
0