相对DateTime函数不适用于所有实例

时间:2015-03-07 01:38:44

标签: asp.net vb.net

我使用以下函数创建一个相对的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

1 个答案:

答案 0 :(得分:0)

我认为史蒂夫韦尔伦斯钉了它。基本上你只显示1天,23小时和30分钟的日期部分。如果你真的希望它显示为2天,那么而不是你的

DateTime.Now.Subtract(givenDate)

你可以使用像

这样的东西
DateDiff(DateInterval.Day, DateTime.Now.Date, givenDate.Date)

我相信这应该给你几天的差异,好像这两个日期被设置为午夜,在你的情况下,这将是2。然后,如果不是大于0,您可以使用DateDiff小时,具体取决于您想要如何播放它。我认为DateDiff返回的时间很长,所以你必须调整你的功能。