Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Date as simple text (e.g. Today, Yesterday, 1 Week Ago) in .Net

Does anyone have a simple function at hand for converting a date to a simple date-relative string in .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.

like image 931
TimS Avatar asked Oct 14 '09 14:10

TimS


People also ask

How do you find the day of the week from a date string?

use date. weekday() Return the day of the week as an integer, where Monday is 0 and Sunday is 6.

How do I format day and date?

In traditional American usage, dates are written in the month–day–year order (e.g. September 21, 2022) with a comma before and after the year if it is not at the end of a sentence, and time in 12-hour notation (7:03 am).

Is date a type in C#?

There is no Date DataType. However you can use DateTime. Date to get just the Date.


1 Answers

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";
}
like image 100
aolde Avatar answered Sep 24 '22 03:09

aolde