timeAgo function

String timeAgo(
  1. DateTime d, {
  2. DateTime? now,
})

Implementation

String timeAgo(DateTime d, {DateTime? now}) {
  Duration diff = (now ?? DateTime.now()).difference(d);
  String ago;
  if (diff.inDays > 365) {
    ago = "${(diff.inDays / 365).floor()} ${(diff.inDays / 365).floor() == 1 ? "year" : "years"}";
  } else if (diff.inDays > 30) {
    ago = "${(diff.inDays / 30).floor()} ${(diff.inDays / 30).floor() == 1 ? "month" : "months"}";
  } else if (diff.inDays > 7) {
    ago = "${(diff.inDays / 7).floor()} ${(diff.inDays / 7).floor() == 1 ? "week" : "weeks"}";
  } else if (diff.inDays > 0) {
    ago = "${diff.inDays} ${diff.inDays == 1 ? "day" : "days"}";
  } else if (diff.inHours > 0) {
    ago = "${diff.inHours} ${diff.inHours == 1 ? "hour" : "hours"}";
  } else if (diff.inMinutes > 0) {
    ago = "${diff.inMinutes} ${diff.inMinutes == 1 ? "minute" : "minutes"}";
  } else if (diff.inDays < -365) {
    ago = "${(diff.inDays / 365).floor().abs()} ${(diff.inDays / 365).floor() == -1 ? "year" : "years"}";
  } else if (diff.inDays < -30) {
    ago = "${(diff.inDays / 30).floor().abs()} ${(diff.inDays / 30).floor() == -1 ? "month" : "months"}";
  } else if (diff.inDays < -7) {
    ago = "${(diff.inDays / 7).floor().abs()} ${(diff.inDays / 7).floor() == -1 ? "week" : "weeks"}";
  } else if (diff.inDays < 0) {
    ago = "${diff.inDays.abs()} ${diff.inDays == -1 ? "day" : "days"}";
  } else if (diff.inHours < 0) {
    ago = "${diff.inHours.abs()} ${diff.inHours == -1 ? "hour" : "hours"}";
  } else if (diff.inMinutes < 0) {
    ago = "${diff.inMinutes.abs()} ${diff.inMinutes == -1 ? "minute" : "minutes"}";
  } else if (diff.inSeconds.abs() >= 5) {
    ago = "${diff.inSeconds.abs()} ${diff.inSeconds.abs() == 1 ? "second" : "seconds"}";
  } else {
    return "just now";
  }
  if (diff.inSeconds < 0) {
    return "in $ago";
  } else {
    return "$ago ago";
  }
}