Skip to content

Instantly share code, notes, and snippets.

@Andrey2G
Created April 22, 2017 10:13
Show Gist options
  • Save Andrey2G/0d40a58cbbf0604972d14e63730bb869 to your computer and use it in GitHub Desktop.
Save Andrey2G/0d40a58cbbf0604972d14e63730bb869 to your computer and use it in GitHub Desktop.
public static string ToReadableTime(this DateTime value)
{
var ts = new TimeSpan(DateTime.UtcNow.Ticks - value.Ticks);
double delta = ts.TotalSeconds;
if (delta < 60)
{
return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";
}
if (delta < 120)
{
return "a minute ago";
}
if (delta < 2700) // 45 * 60
{
return ts.Minutes + " minutes ago";
}
if (delta < 5400) // 90 * 60
{
return "an hour ago";
}
if (delta < 86400) // 24 * 60 * 60
{
return ts.Hours + " hours ago";
}
if (delta < 172800) // 48 * 60 * 60
{
return "yesterday";
}
if (delta < 2592000) // 30 * 24 * 60 * 60
{
return ts.Days + " days ago";
}
if (delta < 31104000) // 12 * 30 * 24 * 60 * 60
{
int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
return months <= 1 ? "one month ago" : months + " months ago";
}
var years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
return years <= 1 ? "one year ago" : years + " years ago";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment