15

가능한 중복 :

상대 시간을 어떻게 계산합니까?

asp.net MVC의 레일즈 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());
}

위의 도우미 출력을 페이지의 어딘가에있는 다음 자바 스크립트와 결합하면 돈을받을 수 있습니다.

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

희망이 도움이됩니다!


  • 작은 nitpick, 당신은이 함수로 pluralisation 오류가 있습니다. - Tom Gullen

연결된 질문


관련된 질문

최근 질문