Tuesday 20 July 2010

Relative dates

So here is some interesting code that gives you Twitter style relative dates in your application. I've written it out in the form I use it, as an extension method for the HtmlHelper class in ASP.NET MVC.

public static string Relative(this HtmlHelper helper, DateTime date)
{
    var span = DateTime.Now - date;
    var minutes = span.TotalMinutes;

    if (minutes < 0.75)
        return "less than a minute ago";
    else if (minutes < 1.5)
        return "a minute ago";
    else if (minutes < 45)
        return string.Format("{0} minutes ago", Math.Round(minutes));
    else if (minutes < 90)
        return "an hour ago";
    else if (minutes < 1440)
        return string.Format("{0} hours ago", Math.Round(Math.Abs(span.TotalHours)));
    else if (minutes < 2880)
        return "a day ago";
    else if (minutes < 43200)
        return string.Format("{0} days ago", Math.Floor(Math.Abs(span.TotalDays)));
    else if (minutes < 86400)
        return "a month ago";
    else if (minutes < 525600)
        return string.Format("{0} months ago", Math.Floor(Math.Abs(span.TotalDays / 30)));
    return string.Format("{0} years ago", Math.Floor(Math.Abs(span.TotalDays / 365)));
}


Now it is very easy in your view code to add pretty dates whenever you need them.

No comments:

Post a Comment