/// <summary> /// Convert a <see cref="DateTime"/> object to a relative date (e.g., /// Today, tomorrow, yesterday) string format. /// </summary> /// <param name="value">The <see cref="DateTime"/> object to convert.</param> /// <param name="options"> /// One of the <see cref="RelativeDateFormatting"/> values. /// </param> /// <returns>A relative date/time formatted string.</returns> public static string ToRelativeDateString(this DateTime value, RelativeDateFormatting options) { var days = (value.Date - DateTime.Now.Date).Days; return(days switch { 0 => String.Format(CultureInfo.CurrentCulture, Strings.RelativeDateFormatStringToday, value), 1 => Strings.RelativeDateFormatStringTomorrow, -1 => Strings.RelativeDateFormatStringYesterday, _ when days >= 2 && days <= 5 && options == RelativeDateFormatting.DayNames => value.ToString("dddd", CultureInfo.CurrentCulture), _ when days >= 2 && days <= 5 => String.Format(CultureInfo.CurrentCulture, Strings.RelativeDateFormatStringDaysFromNow, days), _ when days <= -2 && days >= -5 && options == RelativeDateFormatting.DayNames => value.ToString("dddd", CultureInfo.CurrentCulture), _ when days <= -2 && days >= -5 => String.Format(CultureInfo.CurrentCulture, Strings.RelativeDateFormatStringDaysAgo, Math.Abs(days)), _ => String.Format(CultureInfo.CurrentCulture, Strings.RelativeDateFormatStringDefault, value) });
/// <summary> /// Convert a <see cref="DateTime"/> object to a relative date /// (e.g., Today, tomorrow, yesterday) string format. /// </summary> /// <param name="value">The <see cref="DateTime"/> object to convert.</param> /// <param name="options">One of the <see cref="RelativeDateFormatting"/> values.</param> /// <returns>A relative date/time formatted string.</returns> public static string ToRelativeDateString(this DateTime value, RelativeDateFormatting options) { var diff = value.Date - DateTime.Now.Date; var days = diff.Days; string format; switch (days) { case 0: format = String.Format(CultureInfo.CurrentCulture, Strings.RelativeDateFormatStringToday, value); break; case 1: format = Strings.RelativeDateFormatStringTomorrow; break; case -1: format = Strings.RelativeDateFormatStringYesterday; break; case 2: case 3: case 4: case 5: format = options == RelativeDateFormatting.DayNames ? value.ToString("dddd", CultureInfo.CurrentCulture) : String.Format(CultureInfo.CurrentCulture, Strings.RelativeDateFormatStringDaysFromNow, days); break; case -2: case -3: case -4: case -5: format = options == RelativeDateFormatting.DayNames ? value.ToString("dddd", CultureInfo.CurrentCulture) : String.Format(CultureInfo.CurrentCulture, Strings.RelativeDateFormatStringDaysAgo, Math.Abs(days)); break; default: format = String.Format(CultureInfo.CurrentCulture, Strings.RelativeDateFormatStringDefault, value); break; } return(format); }
/// <summary> /// Convert a <see cref="DateTime"/> object to a relative date /// (e.g., Today, tomorrow, yesterday) string format. /// </summary> /// <param name="value">The <see cref="DateTime"/> object to convert.</param> /// <param name="options">One of the <see cref="RelativeDateFormatting"/> values.</param> /// <returns>A relative date/time formatted string.</returns> public static string ToRelativeDateString(this DateTime value, RelativeDateFormatting options) { var diff = value.Date - DateTime.Now.Date; var days = diff.Days; string format; switch (days) { case 0: format = String.Format(CultureInfo.CurrentCulture, Resources.RelativeDateFormatStringToday, value); break; case 1: format = Resources.RelativeDateFormatStringTomorrow; break; case -1: format = Resources.RelativeDateFormatStringYesterday; break; case 2: case 3: case 4: case 5: format = options == RelativeDateFormatting.DayNames ? value.ToString("dddd", CultureInfo.CurrentCulture) : String.Format(CultureInfo.CurrentCulture, Resources.RelativeDateFormatStringDaysFromNow, days); break; case -2: case -3: case -4: case -5: format = options == RelativeDateFormatting.DayNames ? value.ToString("dddd", CultureInfo.CurrentCulture) : String.Format(CultureInfo.CurrentCulture, Resources.RelativeDateFormatStringDaysAgo, Math.Abs(days)); break; default: format = String.Format(CultureInfo.CurrentCulture, Resources.RelativeDateFormatStringDefault, value); break; } return format; }