Blog

Tagged by 'timespan'

  • For a news site I am currently working on, I needed to display the last time a news article was last published. I wanted to be able to show the duration based on respective major time format. For example, if an article was displayed a couple hours ago, I would want it to to display “2 hours” not “120 minutes”.

    More importantly, if an article hadn’t been published to the site more than a week, I don’t want the exact time duration to be displayed. I would prefer the following message: “more than a week ago”. This way, if the site administrator gets really lazy the website viewer will not know the exact time period the site was last updated.

    Code:

    public class TimePassed
    {
        public static string GetPassedTime(DateTime since)
        {
            TimeSpan ts = DateTime.Now.Subtract(since);
    
            if (ts.Days <= 7)
            {
                switch (ts.Days)
                {
                    case 0:
                        switch (ts.Hours)
                        {
                            case 0:
                                switch (ts.Minutes)
                                {
                                    case 0:
                                        return String.Format("{0} seconds ago", ts.Seconds);
                                    case 1:
                                        return "1 minute ago";
                                    default:
                                        return String.Format("{0} minutes ago", ts.Minutes);
                                }
                            case 1:
                                return "1 hour ago";
                            default:
                                return String.Format("{0} hours ago", ts.Hours);
                        }
                    case 1:
                        return "yesterday";
                    default:
                        return String.Format("{0} days ago", ts.Days);
                }
            }
            else
            {
                return "more than a week ago";
            }
        }
    }