2010-09-10 20 views
5

¿Cuál es la mejor biblioteca para mostrar fechas relativas (por ejemplo: 20 minutos atrás) para ASP.NET MVC usando en C#?Cálculo de fechas relativas usando asp.net mvc

+0

posible duplicado de [¿Cómo se calcula el tiempo relativo?] (Http://stackoverflow.com/questions/11/how-do-i-calculate-relative-time) –

Respuesta

21

No necesita una biblioteca cuando puede hacerlo con un método de extensión simple. Este es un método de extensión que he utilizado:

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 usuario anónimo presentado una edición sugerida con el título * Kelsey, ¿puedes arreglar tu código para lo siguiente? Cuando timeSince.TotalDays == 1.9243, vuelve "hace 1 días" *, lo que sugiere un error en la línea "ayer". Debería ser un comentario en lugar de una edición, pero no creo que el usuario pueda publicar comentarios. –

6

timeago: a jQuery plugin

¿Qué tal esto? Pero esto es el complemento jQuery. no c#.

+1

Usaría personalmente esta opción, hace el trabajo pesado en el cliente en lugar del servidor, lo que sería importante para los sitios con mucho tráfico. No puede almacenar en caché la información de tipo "minuto atrás". – John

1

Humanizer es una biblioteca fantástica para esto. Está en Nuget e incluye muchas otras conversiones geniales para cadenas y enumeraciones además de fechas.

https://github.com/MehdiK/Humanizer

+0

Humanizer tiene errores con TimeSpan. Ver [aquí] (https://github.com/Humanizr/Humanizer/issues/583) – redwards510

Cuestiones relacionadas