我使用以下函数创建一个相对的DateTime比较字符串,例如:今天(12分钟前)或昨天(21小时前)或2015年3月3日(3天前)。
如果我在1到2天之间进行日期时间比较,则该功能失败,例如:
如果当前时间是:2015年3月6日晚上8:30,比较时间是2015年3月4日晚9:00
我得到:2015年3月4日(1天前)
当我应该得到:2015年3月4日(2天前)。
但有趣的是,如果我在2015年3月4日下午7点进行时间比较,它将于2015年3月4日(2天前)返回。
发生了什么?
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
答案 0 :(得分:0)
我认为史蒂夫韦尔伦斯钉了它。基本上你只显示1天,23小时和30分钟的日期部分。如果你真的希望它显示为2天,那么而不是你的
DateTime.Now.Subtract(givenDate)
你可以使用像
这样的东西DateDiff(DateInterval.Day, DateTime.Now.Date, givenDate.Date)
我相信这应该给你几天的差异,好像这两个日期被设置为午夜,在你的情况下,这将是2。然后,如果不是大于0,您可以使用DateDiff小时,具体取决于您想要如何播放它。我认为DateDiff返回的时间很长,所以你必须调整你的功能。