How to Calculate relative time in C#

Total Post:280

Points:1994
C# 
C#
 293  View(s)
Ratings:
Rate this:

Given a specific DateTime value, how do I display relative time, like:

1 hours ago

3 days ago

2 month ago

3 year ago

  1. Post:1

    Points:7
    Re: How to Calculate relative time in C#

    use following code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web; namespace Example.Models
    {
        public static class Common
        {         public static string ToRelativeTime(this DateTime date)
            {
                const int SECOND = 1;
                const int MINUTE = 60 * SECOND;
                const int HOUR = 60 * MINUTE;
                const int DAY = 24 * HOUR;
                const int MONTH = 30 * DAY;
                var ts = new TimeSpan(DateTime.Now.Ticks - date.Ticks);
                double delta = Math.Abs(ts.TotalSeconds);
                if (delta < 0)
                {
                    return "not yet";
                }
                if (delta < 1 * MINUTE)
                {
                    return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";
                }
                if (delta < 2 * MINUTE)
                {
                    return "a minute ago";
                }
                if (delta < 45 * MINUTE)
                {
                    return ts.Minutes + " minutes ago";
                }
                if (delta < 90 * MINUTE)
                {
                    return "an hour ago";
                }
                if (delta < 24 * HOUR)
                {
                    return ts.Hours + " hours ago";
                }
                if (delta < 48 * HOUR)
                {
                    return "yesterday";
                }
                if (delta < 30 * DAY)
                {
                    return ts.Days + " days ago";
                }
                if (delta < 12 * MONTH)
                {
                    int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
                    return months <= 1 ? "one month ago" : months + " months ago";
                }
                else
                {
                    int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
                    return years <= 1 ? "one year ago" : years + " years ago";
                }
            }
        }

    use above method like this:

    DateTime.Now.ToRelativeTime();


    thanks,  i hope it will help for you.


      Modified On Jun-02-2018 02:35:35 AM

Answer

NEWSLETTER

Enter your email address here always to be updated. We promise not to spam!