From cd04c1b66f96a7a00a94faf2b02e1fb921541c34 Mon Sep 17 00:00:00 2001 From: Oliver Booth Date: Sat, 16 Nov 2019 02:10:16 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A8=20Add=20meaningful=20implementatio?= =?UTF-8?q?n=20of=20Ago()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ago() now returns a human-readable string instead of a DateTime --- X10D/TimeSpanExtensions.cs | 43 ++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) 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"; + } } }