asp.net mvc 时间前用文字助手 [重复]

Posted

技术标签:

【中文标题】asp.net mvc 时间前用文字助手 [重复]【英文标题】:asp.net mvc time ago in words helper [duplicate] 【发布时间】:2011-07-15 04:03:34 【问题描述】:

可能重复:How do I calculate relative time?

有没有类似于 rails 的 asp.net MVC 的 time_ago_in_words 助手?

【问题讨论】:

这很难确定,因为我没有亲自使用过rails或他所指的helper,但根据文档中的context,它看起来类似于ASP中的htmlHelper。网络 MVC。话虽如此,我不相信这是重复的。是的,建议的副本中的代码可以工作,但这是一种纯粹的服务器端方法。不需要在服务器端生成所需的输出,因此我提供的与副本不同的答案仍然是相关的。 不要关闭这个问题 包含有关time_ago_in_words 运作方式的详细信息可能会大大有助于帮助人们有效地回答这个问题。包括想如何使用它的细节会更好 这真的不应该被关闭... 请投票重新打开。 【参考方案1】:

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

这是一个 HtmlHelper,用于创建包含 ISO 8601 时间戳<abbr /> 元素:

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 结合起来,您将获得收益。

<script src="jquery.min.js" type="text/javascript"></script>
<script src="jquery.timeago.js" type="text/javascript"></script>

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

【讨论】:

如果我传递 dateTime.ToUniversal() 日期,timeago 会正确计算相对时间,但工具提示会显示 UTC 时区而不是客户端计算机时区的时间。我错过了什么? 我真的很喜欢这个,谢谢!我认为日期的原始输出可能会更友好,尽管在 SetInnerText 中,我将对其进行更改,以便它很好地降级。【参考方案2】:

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

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";

助手应该是这样的:

public MvcHtmlString Timeago(this HtmlHelper helper, DateTime dateTime) 

    return MvcHtmlString.Create(dateTime.ToRelativeDate());

希望对你有帮助!

【讨论】:

小吹牛,你这个函数有复数错误

以上是关于asp.net mvc 时间前用文字助手 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于引导切换的 asp.net 核心 mvc 标签助手

带有 ASP.NET MVC 6 锚标记助手的 QueryString

csharp ASP.NET的助手,ASP.NET MVC应用服务器端测试

asp.net 5 MVC6 中标签助手和路由属性之间的奇怪行为

您将如何在 asp.net mvc 中实现面包屑助手?

如何在 ASP.Net MVC 剃须刀助手中指定图像的虚拟路径