| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | 
							- using System;
 
- using InABox.Core;
 
- namespace InABox.Avalonia.Converters;
 
- 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;
 
-     }
 
-         
 
-     public string EmptyValue { get; set; } = String.Empty;
 
-     public string Prefix { get; set; } = string.Empty;
 
-     
 
-     protected override string Convert(DateTime value, object? parameter = null)
 
-     {
 
-         var result = value.IsEmpty()
 
-             ? EmptyValue
 
-             : string.IsNullOrWhiteSpace(Prefix)
 
-                 ? FormatTime(value)
 
-                 : $"{Prefix} {FormatTime(value)}";
 
-         return result;
 
-     }
 
- }
 
 
  |