12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using System;
- namespace InABox.Mobile
- {
- public class DateTimeToAgeConverter : AbstractConverter<DateTime, String>
- {
-
- 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);
- }
- }
- }
|