using System; namespace InABox.Mobile { public class DateTimeToAgeConverter : AbstractConverter { public static string FormatTime(DateTime date) { DateTime now = DateTime.Now; String prefix = date > now ? "In" : ""; String suffix = date <= now ? "ago" : ""; TimeSpan span = date > now ? date - now : now - date; if (span.Days > 365) { int years = (span.Days / 365); if (span.Days % 365 != 0) years += 1; return String.Format("{0} {1} {2} {3}", prefix, years, years == 1 ? "year" : "years", suffix).Trim(); } if (span.Days > 30) { int months = (span.Days / 30); if (span.Days % 31 != 0) months += 1; return String.Format("{0} {1} {2} {3}", prefix, months, months == 1 ? "month" : "months", suffix).Trim(); } if (span.Days > 0) return String.Format("{0} {1} {2} {3}", prefix, span.Days, span.Days == 1 ? "day" : "days", suffix).Trim(); if (span.Hours > 0) return String.Format("{0} about {1} {2} {3}", prefix, span.Hours, span.Hours == 1 ? "hour" : "hours", suffix); if (span.Minutes > 0) return String.Format("{0} {1} {2} {3}", prefix, span.Minutes, span.Minutes == 1 ? "minute" : "minutes", suffix).Trim(); if (span.Seconds > 5) return String.Format("{0} {1} seconds {2}", prefix, span.Seconds, suffix).Trim(); if (span.Seconds <= 5) return date > now ? "Imminently" : "Just now"; return string.Empty; } protected override string Convert(DateTime value, object? parameter = null) { return FormatTime(value); } } }