views:

272

answers:

2

Hi,

Does anyone have a simple function to hand for converting a date to a simple string (using .Net)?

E.g. 14-Oct-09 would read "Today", 13-Oct-09 would read "Yesterday" and 7-Oct-09 would read "1 Week Ago" etc...

Cheers, Tim

+4  A: 

You would indeed have to roll your own method of doing this, like JustLoren said.

This is an extension method I've been using. It is GateKiller script made into an extension method. So full credit to him. You could easily change it to however you want it.

public static string ToTimeSinceString(this DateTime value)
{
    const int SECOND = 1;
    const int MINUTE = 60 * SECOND;
    const int HOUR = 60 * MINUTE;
    const int DAY = 24 * HOUR;
    const int MONTH = 30 * DAY;

    TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - value.Ticks);
    double seconds = ts.TotalSeconds;

    // Less than one minute
    if (seconds < 1 * MINUTE)
        return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";

    if (seconds < 60 * MINUTE)
        return ts.Minutes + " minutes ago";

    if (seconds < 120 * MINUTE)
        return "an hour ago";

    if (seconds < 24 * HOUR)
        return ts.Hours + " hours ago";

    if (seconds < 48 * HOUR)
        return "yesterday";

    if (seconds < 30 * DAY)
        return ts.Days + " days ago";

    if (seconds < 12 * MONTH) {
        int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
        return months <= 1 ? "one month ago" : months + " months ago";
    }

    int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
    return years <= 1 ? "one year ago" : years + " years ago";
}
Manticore
That seems to come straight from the accepted answer on the question I linked to in the question comments ;o)
Fredrik Mörk
Really sorry about that. I had forgotten where it came from. Added credit to answer.
Manticore
Great, thank you! Saved me some time :)
TimS
A: 

Something like this extension method?

public static string Stringfy(this DateTime date)
{
    if ((DateTime.Now - date.Date).TotalDays == 0)
        return "Today";

    if ((DateTime.Now - date.Date).TotalDays == 1)
        return "Yesterday";

    // ...

    return "A long time ago, in a galaxy far far away...";
}
Rubens Farias