From 1716cf45d0e4e41c7833105dab10542f5ed5dcf1 Mon Sep 17 00:00:00 2001 From: Mica White Date: Sun, 8 Feb 2026 10:10:24 -0500 Subject: Initial commit --- lib/date_utils.dart | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 lib/date_utils.dart (limited to 'lib/date_utils.dart') diff --git a/lib/date_utils.dart b/lib/date_utils.dart new file mode 100644 index 0000000..941f137 --- /dev/null +++ b/lib/date_utils.dart @@ -0,0 +1,58 @@ +String pluralize(int count, String noun, [String? plural]) { + if (count == 1) { + return noun; + } else { + return plural ?? '${noun}s'; + } +} + +String number(int number) { + const numbers = [ + 'zero', + 'one', + 'two', + 'three', + 'four', + 'five', + 'six', + 'seven', + 'eight', + 'nine', + 'ten' + ]; + + if (number < numbers.length) { + return numbers[number]; + } else { + return number.toString(); + } +} + +String daysAgo(DateTime dateTime) { + final now = DateTime.now(); + final duration = now.difference(dateTime); + + ago(int count, String noun, [String? plural]) { + return "${number(count)} ${pluralize(count, noun, plural)} ago"; + } + + agoRound(double count, String noun, [String? plural]) { + return ago(count.round(), noun, plural); + } + + if (duration.inSeconds < 60) { + return "now"; + } else if (duration.inMinutes < 60) { + return ago(duration.inMinutes, "minute"); + } else if (duration.inHours < 24) { + return ago(duration.inHours, "hour"); + } else if (duration.inDays < 7) { + return ago(duration.inDays, "day"); + } else if (duration.inDays < 30) { + return agoRound(duration.inDays / 7, "week"); + } else if (duration.inDays < 365) { + return agoRound(duration.inDays / 30, "month"); + } else { + return agoRound(duration.inDays / 365, "years"); + } +} -- cgit v1.2.3