Конвертирование DateTime в строку формата «Минут назад»

Введение

Пример ниже показывает реализацию функции конвертирования значения DateTime в формат X минут назад (X minutes ago). На вход функции передается параметр в формате DateTime, а возвращается строка с количеством прошедших минут, часов и т.д.

Код

 public static string getTimeAgo(DateTime strDate)
        {
            string strTime = string.Empty;
            if (IsDate(Convert.ToString(strDate)))
            {
                TimeSpan t = DateTime.UtcNow - Convert.ToDateTime(strDate);
                double deltaSeconds = t.TotalSeconds;

                double deltaMinutes = deltaSeconds / 60.0f;
                int minutes;

                if (deltaSeconds < 5)
                {
                    return "Прямо сейчас";
                }
                else if (deltaSeconds < 60)
                {
                    return Math.Floor(deltaSeconds) + " секунд назад";
                }
                else if (deltaSeconds < 120)
                {
                    return "Минуту назад";
                }
                else if (deltaMinutes < 60)
                {
                    return Math.Floor(deltaMinutes) + " минут назад";
                }
                else if (deltaMinutes < 120)
                {
                    return "Час назад";
                }
                else if (deltaMinutes < (24 * 60))
                {
                    minutes = (int)Math.Floor(deltaMinutes / 60);
                    return minutes + " часов назад";
                }
                else if (deltaMinutes < (24 * 60 * 2))
                {
                    return "Вчера";
                }
                else if (deltaMinutes < (24 * 60 * 7))
                {
                    minutes = (int)Math.Floor(deltaMinutes / (60 * 24));
                    return minutes + " дней назад";
                }
                else if (deltaMinutes < (24 * 60 * 14))
                {
                    return "На прошлой неделе";
                }
                else if (deltaMinutes < (24 * 60 * 31))
                {
                    minutes = (int)Math.Floor(deltaMinutes / (60 * 24 * 7));
                    return minutes + " недель назад";
                }
                else if (deltaMinutes < (24 * 60 * 61))
                {
                    return "В прошлом месяце";
                }
                else if (deltaMinutes < (24 * 60 * 365.25))
                {
                    minutes = (int)Math.Floor(deltaMinutes / (60 * 24 * 30));
                    return minutes + " месязев назад";
                }
                else if (deltaMinutes < (24 * 60 * 731))
                {
                    return "В прошлом году";
                }

                minutes = (int)Math.Floor(deltaMinutes / (60 * 24 * 365));
                return minutes + " лет назад";
            }
            else
            {
                return "";
            }
        }
        public static bool IsDate(string o)
        {
            DateTime tmp;
            return DateTime.TryParse(o, out tmp);
        } 

 

Пример использования

MessageBox.Show(getTimeAgo(DateTime.Parse("10.10.2013")));

 

Выведет 7 месяцев назад (статья писалась 23.05.2014)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *