关于c#:asp.net mvc时间以前的单词helper

asp.net mvc time ago in words helper

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do I calculate relative time?

对于ASP.NET MVC,有没有类似于rails的time-ago-in-words helper?


根据预期的输出目标,jquery插件timeago可能是更好的选择。

下面是一个htmlhelper,用于创建包含ISO 8601时间戳的元素:

1
2
3
4
5
6
7
8
public static MvcHtmlString Timeago(this HtmlHelper helper, DateTime dateTime) {
    var tag = new TagBuilder("abbr");
    tag.AddCssClass("timeago");
    tag.Attributes.Add("title", dateTime.ToString("s") +"Z");
    tag.SetInnerText(dateTime.ToString());

    return MvcHtmlString.Create(tag.ToString());
}

将上述助手的输出与页面上的以下javascript结合起来,您就可以赚大钱了。

1
2
3
4
5
6
<script src="jquery.min.js" type="text/javascript">
<script src="jquery.timeago.js" type="text/javascript">

jQuery(document).ready(function() {
  jQuery("abbr.timeago").timeago();
});


我目前正在使用以下扩展方法。不确定这是不是最好的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static string ToRelativeDate(this DateTime dateTime)
{
    var timeSpan = DateTime.Now - dateTime;

    if (timeSpan <= TimeSpan.FromSeconds(60))
        return string.Format("{0} seconds ago", timeSpan.Seconds);

    if (timeSpan <= TimeSpan.FromMinutes(60))
        return timeSpan.Minutes > 1 ? String.Format("about {0} minutes ago", timeSpan.Minutes) :"about a minute ago";

    if (timeSpan <= TimeSpan.FromHours(24))
        return timeSpan.Hours > 1 ? String.Format("about {0} hours ago", timeSpan.Hours) :"about an hour ago";

    if (timeSpan <= TimeSpan.FromDays(30))
        return timeSpan.Days > 1 ? String.Format("about {0} days ago", timeSpan.Days) :"yesterday";

    if (timeSpan <= TimeSpan.FromDays(365))
        return timeSpan.Days > 30 ? String.Format("about {0} months ago", timeSpan.Days / 30) :"about a month ago";

    return timeSpan.Days > 365 ? String.Format("about {0} years ago", timeSpan.Days / 365) :"about a year ago";
}

助手应该是这样的:

1
2
3
4
public MvcHtmlString Timeago(this HtmlHelper helper, DateTime dateTime)
{
    return MvcHtmlString.Create(dateTime.ToRelativeDate());
}

希望它有帮助!