Введение
Пример ниже показывает реализацию функции конвертирования значения 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)