I am using the following function to create a relative DateTime comparison string such as: Today (12 Minutes Ago), or Yesterday (21 Hours Ago), or 3/3/2015 (3 Days Ago).
The function is failing if I have a DateTime comparison between 1 and 2 days, so for example:
If the current time is: 3/6/2015 8:30pm and the comparison time is 3/4/2015 9:00pm
I get: 3/4/2015 (1 Day Ago)
When I should be getting: 3/4/2015 (2 Days Ago).
But what is interesting is that if I have a time comparison of 3/4/2015 7:00pm, it will return 3/4/2015 (2 Days Ago).
What's going on?
Public Function GetRelativeTime(givenDate As DateTime) As String
If (givenDate.Date = DateTime.Today) Then
Return "Today " + ConvertTimeSpanToRelativeTime(DateTime.Now.Subtract(givenDate))
ElseIf (givenDate.Date = DateTime.Today.AddDays(-1)) Then
Return "Yesterday " + ConvertTimeSpanToRelativeTime(DateTime.Now.Subtract(givenDate))
Else
Return givenDate.ToString("d") + " " + ConvertTimeSpanToRelativeTime(DateTime.Now.Subtract(givenDate))
End If
End Function
Private Shared Function ConvertTimeSpanToRelativeTime(diffDate As TimeSpan) As String
Dim d As New StringBuilder()
If diffDate.Days > 0 Then
d.AppendFormat("({0} {1} ago)", diffDate.Days, If(diffDate.Days > 1, "Days", "Day"))
ElseIf diffDate.Hours > 0 Then
d.AppendFormat("({0} {1} ago)", diffDate.Hours, If(diffDate.Hours > 1, "Hours", "Hour"))
ElseIf diffDate.Minutes > 0 Then
d.AppendFormat("({0} {1} ago)", diffDate.Minutes, If(diffDate.Minutes > 1, "Minutes", "Minute"))
ElseIf diffDate.Seconds > 0 Then
d.AppendFormat("({0} {1} ago)", diffDate.Seconds, If(diffDate.Seconds > 1, "Seconds", "Seconds"))
ElseIf diffDate.Milliseconds > 0 Then
d.AppendFormat("(Just Now)", diffDate.Milliseconds)
End If
Return d.ToString()
End Function