Example #1
0
        public static string DateDiffShort(DateTime first, DateTime sec, string beforeTemplate = "{0}", string afterTemplate = "{0}")
        {
            if (first < DateTime.MinValue)
            {
                first = DateTime.MinValue;
            }
            if (sec < DateTime.MinValue)
            {
                sec = DateTime.MinValue;
            }
            if (first > DateTime.MaxValue)
            {
                first = DateTime.MaxValue;
            }
            if (sec > DateTime.MaxValue)
            {
                sec = DateTime.MaxValue;
            }

            bool         after    = first > sec;
            DateTimeSpan dateDiff = DateTimeSpan.CompareDates(first, sec);
            string       txtDiff  = string.Empty;

            if (dateDiff.Years > 0)
            {
                txtDiff = Devmasters.Lang.CS.Plural.Get(dateDiff.Years, "rok;{0} roky;{0} let");
            }
            else if (dateDiff.Months > 3)
            {
                txtDiff = Devmasters.Lang.CS.Plural.Get(dateDiff.Months, "měsíc;{0} měsíce;{0} měsíců");
            }
            else
            {
                txtDiff = Devmasters.Lang.CS.Plural.GetWithZero(dateDiff.Days, "dnes", "den", "{0} dny", "{0} dnů");
            }

            if (after)
            {
                return(string.Format(afterTemplate, txtDiff));
            }
            else
            {
                return(string.Format(beforeTemplate, txtDiff));
            }
        }
Example #2
0
        public static string FormatInterval(TimeSpan ts, System.Globalization.CultureInfo culture)
        {
            var          end = DateTime.Now;
            DateTimeSpan dts = DateTimeSpan.CompareDates(end - ts, end);
            string       s   = "";

            if (dts.Years > 0)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Years, culture, "rok", "{0} roky", "{0} let");
            }
            if (dts.Months > 0)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Months, "měsíc;{0} měsíce;{0} měsíců", culture);
            }
            if (dts.Days > 0)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Days, "den;{0} dny;{0} dnů", culture);
            }
            if (dts.Hours > 0)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Hours, "hodinu;{0} hodiny;{0} hodin", culture);
            }
            if (dts.Minutes > 0)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Minutes, "minutu;{0} minuty;{0} minut", culture);
            }
            if (dts.Seconds > 0)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Seconds, "sekundu;{0} sekundy;{0} sekund", culture);
            }
            if (dts.Milliseconds > 0)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Milliseconds, "{0} ms;{0} ms;{0} ms", culture);
            }

            return(s.Trim());
        }
        public static DateTimeSpan CompareDates(DateTime date1, DateTime date2)
        {
            if (date2 < date1)
            {
                var sub = date1;
                date1 = date2;
                date2 = sub;
            }

            DateTime current = date1;
            int      years   = 0;
            int      months  = 0;
            int      days    = 0;

            Phase        phase       = Phase.Years;
            DateTimeSpan span        = new DateTimeSpan();
            int          officialDay = current.Day;

            while (phase != Phase.Done)
            {
                switch (phase)
                {
                case Phase.Years:
                    if (current.AddYears(years + 1) > date2)
                    {
                        phase   = Phase.Months;
                        current = current.AddYears(years);
                    }
                    else
                    {
                        years++;
                    }
                    break;

                case Phase.Months:
                    if (current.AddMonths(months + 1) > date2)
                    {
                        phase   = Phase.Days;
                        current = current.AddMonths(months);
                        if (current.Day < officialDay && officialDay <= DateTime.DaysInMonth(current.Year, current.Month))
                        {
                            current = current.AddDays(officialDay - current.Day);
                        }
                    }
                    else
                    {
                        months++;
                    }
                    break;

                case Phase.Days:
                    if (current.AddDays(days + 1) > date2)
                    {
                        current = current.AddDays(days);
                        var timespan = date2 - current;
                        span  = new DateTimeSpan(years, months, days, timespan.Hours, timespan.Minutes, timespan.Seconds, timespan.Milliseconds);
                        phase = Phase.Done;
                    }
                    else
                    {
                        days++;
                    }
                    break;
                }
            }

            return(span);
        }
Example #4
0
        public static string FormatIntervalSinglePart(TimeSpan ts, DateTimePart minDatePart, string numFormat = "N1")
        {
            var          end = DateTime.Now;
            DateTimeSpan dts = DateTimeSpan.CompareDates(end - ts, end);
            string       s   = "";

            if (dts.Years > 0 && minDatePart > DateTimePart.Year)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Years, "{0} rok;{0} roky;{0} let");
            }
            else if (dts.Years > 0)
            {
                decimal part = dts.Years + dts.Months / 12m;
                if (part % 1 > 0)
                {
                    s += string.Format(" {0:" + numFormat + "} let", part);
                }
                else
                {
                    s += Devmasters.Lang.CS.Plural.Get((int)part, " {0} rok; {0} roky; {0} let");
                };
                return(s);
            }

            if (dts.Months > 0 && minDatePart > DateTimePart.Month)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Months, "{0} měsíc;{0} měsíce;{0} měsíců");
            }
            else if (dts.Months > 0)
            {
                decimal part = dts.Months + dts.Days / 30m;
                if (part % 1 > 0)
                {
                    s += string.Format(" {0:" + numFormat + "} měsíců", part);
                }
                else
                {
                    s += Devmasters.Lang.CS.Plural.Get((int)part, " {0} měsíc; {0} měsíce; {0} měsíců");
                };
                return(s);
            }

            if (dts.Days > 0 && minDatePart > DateTimePart.Day)
            {
                s = " " + Devmasters.Lang.CS.Plural.Get(dts.Days, " {0} den;{0} dny;{0} dnů");
            }
            else if (dts.Days > 0)
            {
                decimal part = dts.Days + dts.Hours / 24m;
                if (part % 1 > 0)
                {
                    s = " " + string.Format(" {0:" + numFormat + "} dní", part);
                }
                else
                {
                    s = " " + Devmasters.Lang.CS.Plural.Get((int)part, " {0} den;{0} dny;{0} dnů");
                };
                return(s);
            }

            if (dts.Hours > 0 && minDatePart > DateTimePart.Hour)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Hours, " {0} hodinu;{0} hodiny;{0} hodin");
            }
            else if (dts.Hours > 0)
            {
                decimal part = dts.Hours + dts.Minutes / 60m;
                if (part % 1 > 0)
                {
                    s += string.Format(" {0:" + numFormat + "} hodin", part);
                }
                else
                {
                    s += " " + Devmasters.Lang.CS.Plural.Get((int)part, " {0} hodinu;{0} hodiny;{0} hodin");
                }
                return(s);
            }

            if (dts.Minutes > 0 && minDatePart > DateTimePart.Minute)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Minutes, "minutu;{0} minuty;{0} minut");
            }
            else if (dts.Minutes > 0)
            {
                decimal part = dts.Minutes + dts.Seconds / 60m;
                if (part % 1 > 0)
                {
                    s += string.Format(" {0:" + numFormat + "} minut", part);
                }
                else
                {
                    s += " " + Devmasters.Lang.CS.Plural.Get((int)part, "minutu;{0} minuty;{0} minut");
                };
                return(s);
            }

            if (dts.Seconds > 0 && minDatePart > DateTimePart.Second)
            {
                s += " " + Devmasters.Lang.CS.Plural.Get(dts.Seconds, "sekundu;{0} sekundy;{0} sekund");
            }
            else
            {
                decimal part = dts.Seconds + dts.Milliseconds / 1000m;
                if (part % 1 > 0)
                {
                    s += string.Format(" {0:" + numFormat + "} sekund", part);
                }
                else
                {
                    s += " " + Devmasters.Lang.CS.Plural.Get((int)part, "sekundu;{0} sekundy;{0} sekund");
                };
                return(s);
            }

            //if (dts.Milliseconds > 0)
            //    s += " " + Devmasters.Lang.CS.Plural.Get(dts.Milliseconds, "{0} ms;{0} ms;{0} ms");

            return(s.Trim());
        }