Human-readable date formats
-
21-09-2019 - |
Question
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 application.
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)";
}
}
OTHER TIPS
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
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.