15

可能な重複:

相対時間をどのように計算するのですか?

asp.net MVCのためのrail'time_ago_in_wordsヘルパーに似たものはありますか?


  • 私は個人的にレールやヘルパーを指しているわけではないので、特定するのは難しいですが、コンテキストドキュメントでは、ASP.NET MVCのHtmlHelperに似ているように見えます。つまり、私はこれが重複しているとは思わない。はい、提案された複製のコードは機能しますが、これは純粋にサーバー側のアプローチです。必要な出力はサーバー側で生成する必要はないので、複製とは異なる私が提供した回答はまだ適切です。この質問を閉じることはできません。 - Nathan Taylor
  • 方法の詳細を含むtime_ago_in_words人々がこれに効果的に答えるのを助けるために、おそらく長い道のりを行くでしょう。方法の詳細を含む君はそれを使用したいと思うさらに良い。 - Shog9
  • これは本当に閉鎖されていないはずです...再票に投票してください。 - Nathan Taylor

2 답변


23

意図した出力ターゲットに応じて、jQueryプラグインタイムアゴより良い選択肢かもしれません。

作成するHtmlHelperは次のとおりです。<abbr />要素を含む要素ISO 8601タイムスタンプ:

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タイムゾーンが表示されます。私は何が欠けていますか? - emzero
  • 私は本当にこれが大好きです、ありがとう!私は、日付の元の出力はより親しみやすいかもしれないと思うSetInnerText、私はそれがうまく劣化するようにそれを変更します。 - Luke

18

私は現在次の拡張メソッドを使用しています。それが最高のものであるかどうかは分かりません。

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());
}

それが役に立てば幸い!


  • 小さなニットピック、あなたはこの関数で複数化エラーがあります - Tom Gullen

リンクされた質問


関連する質問

最近の質問