ProgrammingJavascriptCareerProductivityGadgetsASP.NETWeb Design
Written some days ago

How To Calculate "Time Ago" In C#

Written by
Published on
Modified on
Filed under
How To Calculate "Time Ago" In C#

You see this time format all over the internet nowadays. Posted 3 hours ago. You can see in any of a number of situations. For example, how along ago comments were posted or how long ago a blog post was published.

Here is a quick implementation in C# that gets the job done. This is a very generic function, so you can place it wherever you keep your most used functions and just call it whenever it is needed. It relies on the TimeSpan objects broken down properties, such as days, hours, minutes and seconds. It uses the DateTime classes Subtract method, which subtracts the passed in date with the objects current date.

The resulting TimeSpan object contains all of the time intervals that we're going to be needing to display our date properly. After that we just run through each of these values displays the largest units first, such as Days.


    // return how much time passed since date object
    public static string GetTimeSince(DateTime objDateTime)
    {
        // here we are going to subtract the passed in DateTime from the current time converted to UTC
        TimeSpan ts = DateTime.Now.ToUniversalTime().Subtract(objDateTime);
        int intDays = ts.Days;
        int intHours = ts.Hours;
        int intMinutes = ts.Minutes;
        int intSeconds = ts.Seconds;

        if (intDays > 0)
            return string.Format("{0} days", intDays);

        if (intHours > 0)
            return string.Format("{0} hours", intHours);

        if (intMinutes > 0)
            return string.Format("{0} minutes", intMinutes);

        if (intSeconds > 0)
            return string.Format("{0} seconds", intSeconds);

        // let's handle future times..just in case
        if (intDays < 0)
            return string.Format("in {0} days", Math.Abs(intDays));

        if (intHours < 0)
            return string.Format("in {0} hours", Math.Abs(intHours));

        if (intMinutes < 0)
            return string.Format("in {0} minutes", Math.Abs(intMinutes));

        if (intSeconds < 0)
            return string.Format("in {0} seconds", Math.Abs(intSeconds));

        return "a bit";
    }


The function assumes a DateTime object with a UTC time passed in. If your time is not in UTC, you don't need to convert the DateTime.Now to UTC.



TimeSpan ts = DateTime.Now.Subtract(objDateTime);

The TimeSpan object represents an interval that is measured as a positive or negative number of days, hours, minutes, seconds, and fractions of a second. The Subtract function of the DateTime class will return a TimeSpan with the interval between both days. The highest measurement of time that the TimeSpan uses is Days, for consistency. So we start there and work our way down to seconds.

Just copy and paste that into your helper functions library and you're good to go. But feel free to clean it up and improve it in any way. Maybe passing in a boolean value indicating whether to handle UTC would be a nice touch.

Walter Guevara is a software engineer, startup founder and currently teaches programming for a coding bootcamp. He is currently building things that don't yet exist.
#C#

Comments

No messages posted yet

Developer Poll

Q:

Stay up to date

Sign up for my FREE newsletter. Get informed of the latest happenings in the programming world.

Add a comment

Keep me up to date on the latest programming news
Add Comment

Stay up to date

Get informed of the latest happenings in the programming world.

No thanks