2009-12-26 83 views
9

大家可能已經注意到,某些web應用程序(例如,GMail的某些部分)的比單純DD/MM/YYYY更人類可讀的格式顯示日期。人類可讀的日期格式

例如,如果我從23日(恰好是5天前在寫作的時候打開一個郵件項目,我會得到如下:

12月23日(3天前)

我想實現我自己的Web應用程序類似的邏輯來此。

例如,使用.NET TimeSpan對象打交道時,我想將它轉化成如文本如下:

2個月

3天

是否有一個.NET庫已經能夠這樣做的?

如果不是我可能會建立一些基本的和開源它。


我在這裏做了一個基本的啓動:

public static class TimeSpanHelpers 
{ 
    public static string ToHumanReadableString(
     this TimeSpan timeSpan) 
    { 
     if (timeSpan.TotalDays > 30) 
      return (timeSpan.TotalDays/30) + " month(s)"; 

     if (timeSpan.TotalDays > 7) 
      return (timeSpan.TotalDays/7) + " week(s)"; 

     return (timeSpan.TotalDays) + " day(s)"; 
    } 
} 
+3

請參閱:http://stackoverflow.com/questions/11/how-do-i-calculate-relative-time – CMS 2009-12-26 07:21:37

+0

真棒...我知道有人會問這個,但無法弄清楚什麼條件類型進入搜索框。 – Jonathan 2009-12-26 07:38:23

+0

我在我的博客上有一個簡單的算法,可以擴展:http://www.robfe.com/2009/09/timeago-for-csharp/與您的恐怕不是很不一樣,恐怕... – 2009-12-26 07:27:04

回答

7

Noda Time組是在做眼前這個過程。來吧,加入樂趣。忘了提項目所在地Noda Time項目

+0

很酷的東西!我會到那邊去的。 – Jonathan 2009-12-26 07:39:05

+1

看起來很酷。你能否告訴我們在節點時間項目中我們應該看看的地方。 – heneryville 2013-05-17 13:58:48

1

另一個庫這樣做的:http://relativetime.codeplex.com/

(適用於的NuGet)

+0

它工作正常,但似乎無法做到未來的日期(例如,我希望它說「在2天內」) – 2016-03-03 23:23:30

10

嘗試Humanizer http://humanizr.net/

TimeSpan.FromMilliseconds(1299630020).Humanize(3) => "2 weeks, 1 day, 1 hour" 

// in de-DE culture 
TimeSpan.FromDays(1).Humanize() => "Ein Tag" 
TimeSpan.FromDays(2).Humanize() => "2 Tage" 

// in sk-SK culture 
TimeSpan.FromMilliseconds(1).Humanize() => "1 milisekunda" 

// and a lot more 
DateTime.UtcNow.AddHours(2).Humanize() => "2 hours from now" 
"case".ToQuantity(5) => "5 cases" 
"man".ToQuantity(2) => "2 men" 
122.ToWords() => "one hundred and twenty-two" 
(.5).Gigabytes().Humanize() => "512 MB" 
"Long text to truncate".Truncate(10) => "Long text…", 
"Sentence casing".Transform(To.TitleCase) => "Sentence Casing" 

的NuGet:

Install-Package Humanizer 
0

我最終使用this method,因爲我需要支持未來的日期,比如3天后。