The .Net datetime format in descriptive text format, such as "Last Month"?

Is there any functionality in .Net or any Nuget package to put time into a descriptive format of how far back in the past it was.

eg. Given the date they say how it was in the past.

  • Yesterday
  • 5 days ago
  • the last week
  • Last month
  • 4 months ago
  • In the past year

I saw similar things in Perl and I don't want to reinvent the wheel

+4
source share
2 answers

You can install this NuGet package and you will have a DateTime.ToNaturalRelativeTime extension method that seems to do what you want.

+5
source

There is no built-in way to do this on .NET, but just make an extension method (idea from this question , Vincent Robert and Jeff Atwood):

 public static string AsRelative(this DateTime dt) { var ts = new TimeSpan(DateTime.UtcNow.Ticks - dt.Ticks); double delta = Math.Abs(ts.TotalSeconds); const int SECOND = 1; const int MINUTE = 60 * SECOND; const int HOUR = 60 * MINUTE; const int DAY = 24 * HOUR; const int MONTH = 30 * DAY; if (delta < 0) { return "not yet"; } if (delta < 1 * MINUTE) { return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago"; } if (delta < 2 * MINUTE) { return "a minute ago"; } if (delta < 45 * MINUTE) { return ts.Minutes + " minutes ago"; } if (delta < 90 * MINUTE) { return "an hour ago"; } if (delta < 24 * HOUR) { return ts.Hours + " hours ago"; } if (delta < 48 * HOUR) { return "yesterday"; } if (delta < 30 * DAY) { return ts.Days + " days ago"; } if (delta < 12 * MONTH) { int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30)); return months <= 1 ? "one month ago" : months + " months ago"; } else { int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365)); return years <= 1 ? "one year ago" : years + " years ago"; } } 
+2
source

All Articles