2010-09-10 108 views
5

在C#中使用ASP.NET MVC顯示相對日期(例如:20分鐘前)的最佳庫是什麼?使用asp.net計算相對日期mvc

+0

的[我如何計算相對時間?(http://stackoverflow.com/questions/11/how-do-i-calculate-relative-time) – 2010-09-10 15:49:08

回答

21

當一個簡單的擴展方法可以做到這一點時,您不需要庫。這是一個擴展方法,我已經使用:

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

匿名用戶提交的可能重複建議使用標題* Kelsey進行編輯,您是否可以修復以下代碼:當timeSince.TotalDays == 1.9243時,它返回「1天前」*,暗示「昨天」行中存在一個錯誤。它應該是評論而不是編輯,但我不認爲用戶能夠發表評論。 – 2012-01-02 03:53:49

6

timeago: a jQuery plugin

這個怎麼樣? 但這是jQuery插件。不是c#。

+1

我個人使用這個選項,它在客戶端而不是服務器上負擔繁重,對於流量很大的站點來說這很重要。您無法緩存「分鐘前」類型的信息。 – John 2012-01-24 21:20:30

1

Humanizer是一個很棒的圖書館。它在nuget上,除了日期之外,還包括許多字符串和枚舉的其他重要轉換。

https://github.com/MehdiK/Humanizer

+0

Humanizer在TimeSpan中存在錯誤。見[這裏](https://github.com/Humanizr/Humanizer/issues/583) – redwards510 2016-12-08 19:06:06