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