You may have noticed that certain web applications (for example, certain parts of GMail) display dates in a more human-readable format than simply DD/MM/YYYY.
For example, if I open up a mail item from the 23rd (which happens to be 3 days ago at the time of writing, I'll get the following:
Dec 23 (3 days ago)
I'd like to implement similar logic to this in my own web a开发者_开发百科pplication.
For example, when dealing with a .NET TimeSpan object, I'd like to convert it to text such as the following:
2 months
3 days
Is there a .NET library capable of doing this already?
If not I might build something basic and open-source it.
I've made a basic start here:
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)";
}
}
Try 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
The Noda Time group is in the process of doing just this. Come on over and join the fun. Forgot to mention the project location Noda Time project
Another library for doing this: http://relativetime.codeplex.com/
(Available on NuGet)
I ended up using this method as I needed to support future dates like 3 days from now.
精彩评论