示例#1
0
        /// <summary>
        /// Промежуток времени. При кол-ве дней меньше daysLimit показываются часы и минуты.
        /// </summary>
        /// <param name="ts"></param>
        /// <param name="daysLimit">Через сколько дней показывать часы и минуты</param>
        /// <param name="sameAndNegative"></param>
        /// <returns></returns>
        public static string GetTimeSpanString(TimeSpan ts, int daysLimit, string sameAndNegative = "same")
        {
            if (ts < TimeSpan.Zero || ts.TotalMinutes < 1)
            {
                return(sameAndNegative);
            }

            var sb = new StringBuilder();
            var i  = PluralsHelper.GetPluralEnding(ts.Days);

            if (ts.Days > 0)
            {
                sb.Append("{0:%d} ");
                sb.Append(PluralsHelper.days[i]);
                if (ts.Days < daysLimit)
                {
                    sb.Append(" ");
                }
            }
            if (ts.Days < daysLimit)
            {
                sb.Append("{0:%h} ч");

                if (ts.Minutes > 0)
                {
                    sb.Append(" {0:%m} м");
                }
            }
            return(string.Format(sb.ToString(), ts));
        }
示例#2
0
        public static string GetAgeString(int?y, int?m, int?d, DateTime now)
        {
            var age = DateHelper.GetAge(y, m, d, now);

            if (age == null)
            {
                return(string.Empty);
            }
            var index = PluralsHelper.GetPluralEnding(age.Value);

            return(string.Format("{0} {1}", age, PluralsHelper.years[index]));
        }
示例#3
0
        /// <summary>
        /// Дата относительно сейчас.
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static string GetRelativeDateString(DateTime date, string ending = "назад")
        {
            TimeSpan s       = DateTime.Now.Subtract(date);
            int      dayDiff = (int)s.TotalDays;
            int      secDiff = (int)s.TotalSeconds;

            if (dayDiff < 0) // future
            {
                return(date.ToString("dd.MM.yyyy hh:mm"));
            }

            if (dayDiff == 0)
            {
                if (secDiff < 2 * 60)
                {
                    return("только что");
                }
                if (secDiff < 3600) // час
                {
                    var min        = (int)Math.Floor((double)secDiff / 60);
                    var minsPlural = PluralsHelper.minutes[PluralsHelper.GetPluralEnding(min)];
                    return(string.Format("{0} {1} {2}",
                                         min, minsPlural, ending));
                }
                if (secDiff < 7200) // 2 часа
                {
                    return(string.Format("час {0}", ending));
                }
                if (secDiff < 86400) // сутки
                {
                    return(string.Format("{0} ч. {1}",
                                         Math.Floor((double)secDiff / 3600), ending));
                }
            }

            if (dayDiff == 1)
            {
                return("вчера");
            }
            if (dayDiff < 7)
            {
                var daysPlural = PluralsHelper.days[PluralsHelper.GetPluralEnding(dayDiff)];
                return(string.Format("{0} {1} {2}", dayDiff, daysPlural, ending));
            }

            return(date.ToString("dd.MM.yyyy"));
        }