mvc视图中的日期差异与当前日期/ sql server

时间:2017-01-12 11:52:36

标签: c# sql-server asp.net-mvc razor

我从模型中获取日期,并在视图中显示

@Html.DisplayFor(modelItem => item.UpdateDate)

UpdateDate是datetime。(格式2017-01-12 17:16:32.013)

我想要做的是,将它与当前日期进行比较,并显示时间差异。

  • 如果当前日期时间与UpdatedDate之间的差异较小 超过60分钟然后应该说"' X'分钟前" (其中' X'是 差异(分钟)

  • 如果当前日期时间与UpdatedDate之间的差异更大 超过60分钟,不到24小时,它应该说" ' Y'小时' X' 分钟前" (其中' X'是分钟差异,' Y'是小时)

  • 如果当前日期时间和更新日期之间的差异超过24小时,那么它应该说" ' Z'天' Y'小时' X'分钟前" (其中' X'是分钟的差异,' Y'是小时,' Z'是天)

我想在视野中这样做。非常感谢您的帮助。

由于

以下是我这样做的方式,

TimeSpan diff = DateTime.Now - DateTime1;
string formatted = string.Format(
                       CultureInfo.CurrentCulture, 
                       "{0} days, {1} hours, {2} minutes, {3} seconds", 
                       diff.Days, 
                       diff.Hours, 
                       diff.Minutes, 
                       diff.Seconds);


This works but it will prroduce o/p like
0 days 2 hours 28min (o/p needs to be 2 hours 28min) 
or
0 days 0 hours 33 min   ( o/p needs to be 33 min)

如何在不设置if​​ else来检查' 0'并获得预期的产出

我们可以在sql server中为所需的格式编写用户定义的函数吗?

1 个答案:

答案 0 :(得分:0)

Create FUNCTION GetDateDiff
(
@a datetime
)
RETURNS varchar(100)
AS
BEGIN
Declare @Return varchar(100) 
Set @Return = '';
if(Convert(int,(DATEDIFF(day, @a, getdate()))) >= 1)
Begin
    Set @Return += Convert(varchar(10),(DATEDIFF(day, @a, getdate()))) + ' Day ';
End
if(Convert(int,(DATEDIFF(HOUR, @a, getdate()))) >= 1)
Begin
    Set @Return += Convert(varchar(10),(DATEDIFF(HOUR, @a, getdate()))) + ' Hour ';
End
if(Convert(int,(DATEDIFF(MINUTE, @a, getdate()))) >= 1)
Begin
    Set @Return += Convert(varchar(10),(DATEDIFF(MINUTE, @a, getdate()))) + ' Minute ';
End


return @Return
END

所以我在sql中写这个函数,有关改进的建议吗? 此外,当天差大于1时,字符串应为“天”。 (小时和分钟相同)