2010-09-10 21 views
5

Göreli tarihleri ​​görüntülemek için en iyi kütüphane hangisi (örneğin: 20 dakika önce) C# kullanarak ASP.NET MVC için?Asp.net mvc kullanarak göreceli tarihleri ​​hesaplama

+0

[I göreli süresini hesaplamak nasıl?] (Http://stackoverflow.com/questions/11/how-do-i-calculate-relative-time) Anonim kullanıcılar tarafından gönderilen –

cevap

21

Basit bir uzantı yöntemi bunu gerçekleştirdiğinde kütüphaneye ihtiyacınız yoktur. Bu konuda

public static string TimeAgo(this DateTime date) 
{ 
    TimeSpan timeSince = DateTime.Now.Subtract(date); 
    if (timeSince.TotalMilliseconds < 1) return "not yet"; 
    if (timeSince.TotalMinutes < 1) return "just now"; 
    if (timeSince.TotalMinutes < 2) return "1 minute ago"; 
    if (timeSince.TotalMinutes < 60) return string.Format("{0} minutes ago", timeSince.Minutes); 
    if (timeSince.TotalMinutes < 120) return "1 hour ago"; 
    if (timeSince.TotalHours < 24) return string.Format("{0} hours ago", timeSince.Hours); 
    if (timeSince.TotalDays < 2) return "yesterday"; 
    if (timeSince.TotalDays < 7) return string.Format("{0} days ago", timeSince.Days); 
    if (timeSince.TotalDays < 14) return "last week"; 
    if (timeSince.TotalDays < 21) return "2 weeks ago"; 
    if (timeSince.TotalDays < 28) return "3 weeks ago"; 
    if (timeSince.TotalDays < 60) return "last month"; 
    if (timeSince.TotalDays < 365) return string.Format("{0} months ago", Math.Round(timeSince.TotalDays/30)); 
    if (timeSince.TotalDays < 730) return "last year"; //last but not least... 
    return string.Format("{0} years ago", Math.Round(timeSince.TotalDays/365)); 
} 

Source Link

+0

olası yinelenen başlık ile önerilen bir düzenleme * Kelsey, aşağıdakiler için kodunuzu düzeltebilir misiniz: timeSince.TotalDays == 1.9243, "1 gün önce" * dönüyor, "dün" satırında bir hata öneriliyor. Bir düzenleme yerine bir yorum olmalı, ancak kullanıcının yorum gönderebileceğini sanmıyorum. –

6

timeago: a jQuery plugin

Nasıl: Bu benim kullanmış bir uzantısı yöntemidir? Ama bu jQuery eklentisi. C değil#.

+1

Bu seçeneği kişisel olarak kullanıyorum, istemcinin sunucu üzerinde yoğun bir şekilde kaldırılmasını, trafiğin yoğun olduğu siteler için önemli olacak. "Dakika önce" tür bilgilerini önbelleğe alamazsınız. – John

1

Humanizer, bunun için harika bir kütüphanedir. Nuget üzerinde ve tarihlere ek olarak dizeleri ve enumlar için diğer büyük dönüşümler çok sayıda içerir.

https://github.com/MehdiK/Humanizer

+0

Humanizer'ın TimeSpan ile hataları var. Bkz. [Burada] (https://github.com/Humanizr/Humanizer/issues/583) – redwards510