2010-09-10 25 views
5

Qual è la migliore libreria per la visualizzazione di date relative (ad es .: 20 minuti fa) per ASP.NET MVC utilizzando in C#?Calcolo delle date relative utilizzando asp.net mvc

+0

possibile duplicato di [Come faccio a calcolare il tempo relativo?] (Http://stackoverflow.com/questions/11/how-do-i-calculate-relative-time) –

risposta

21

Non è necessaria una libreria quando un semplice metodo di estensione può farlo. Questo è un metodo di estensione che ho usato:

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

Un utente anonimo ha presentato una modifica suggerita con il titolo * Kelsey, puoi correggere il tuo codice per quanto segue: Quando timeSince.TotalDays == 1.9243, restituisce "1 giorno fa" *, suggerendo un bug sulla riga "ieri". Dovrebbe essere un commento piuttosto che una modifica, ma non credo che l'utente sia in grado di postare commenti. –

6

timeago: a jQuery plugin

ne dici di questo? Ma questo è il plugin jQuery. non C#.

+1

Personalmente utilizzerei questa opzione, fa il lavoro pesante sul client anziché sul server che sarebbe importante per i siti con molto traffico. Non è possibile memorizzare le informazioni sul tipo "minuto fa" nella cache. – John

1

Humanizer è una libreria fantastica per questo. È su nuget e include molte altre grandi conversioni per stringhe ed enumerazioni oltre alle date.

https://github.com/MehdiK/Humanizer

+0

Humanizer ha bug con TimeSpan. Vedi [qui] (https://github.com/Humanizr/Humanizer/issues/583) – redwards510

Problemi correlati