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()); } |
希望它有帮助!