diff --git a/X10D/TimeSpanExtensions.cs b/X10D/TimeSpanExtensions.cs index 59c2c1f..d9bc39a 100644 --- a/X10D/TimeSpanExtensions.cs +++ b/X10D/TimeSpanExtensions.cs @@ -14,11 +14,42 @@ /// /// Calculates how long ago a specified was. /// - /// The . - /// Optional. Whether or not to use instead of . - /// Defaults to . - /// Returns a . - public static DateTime Ago(this TimeSpan span, bool utc = false) => - (utc ? DateTime.UtcNow : DateTime.Now) - span; + /// The . Defaults to . + /// Returns a human-readable describing how long ago + /// represents from now. + public static string Ago(this TimeSpan span) + { + if (span < TimeSpan.FromSeconds(60)) + { + return $"{span.Seconds} seconds ago"; + } + + if (span < TimeSpan.FromMinutes(60)) + { + return span.Minutes > 1 ? $"about {span.Minutes} minutes ago" : "about a minute ago"; + } + + if (span < TimeSpan.FromHours(24)) + { + return span.Hours > 1 ? $"about {span.Hours} hours ago" : "about an hour ago"; + } + + if (span <= TimeSpan.FromDays(7)) + { + return span.Days > 1 ? $"about {span.Days} days ago" : "yesterday"; + } + + if (span < TimeSpan.FromDays(30)) + { + return $"about {span.Days} days ago"; + } + + if (span < TimeSpan.FromDays(365)) + { + return span.Days > 30 ? $"about {span.Days} months ago" : "about a month ago"; + } + + return span.Days > 365 ? $"about {span.Days / 365} years ago" : "about a year ago"; + } } }