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.
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
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.
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
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
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
À 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
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
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.
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.
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