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)); } }
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); }
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()); }