toTimeAgo method

String toTimeAgo({
  1. bool numericDates = false,
  2. bool persian = false,
})

Short "time ago": "3h", "2d", "Just now" or "۳ ساعت پیش" with persian. createdAt.toTimeAgo(persian: true)

Implementation

String toTimeAgo({bool numericDates = false, bool persian = false}) {
  final Duration difference = DateTime.now().difference(this);
  String n(int value) => persian ? value.toString().toPersianNumber() : value.toString();
  final int years = difference.inDays ~/ 365;
  final int months = difference.inDays ~/ 30;
  final int weeks = difference.inDays ~/ 7;
  if (years >= 2) return persian ? "${n(years)} سال پیش" : "${years}y";
  if (years >= 1) return persian ? (numericDates ? "۱ سال پیش" : "سال پیش") : (numericDates ? "1y" : "Last year");
  if (months >= 2) return persian ? "${n(months)} ماه پیش" : "${months}M";
  if (months >= 1) return persian ? (numericDates ? "۱ ماه پیش" : "ماه پیش") : (numericDates ? "1M" : "Last month");
  if (weeks >= 2) return persian ? "${n(weeks)} هفته پیش" : "${weeks}w";
  if (weeks >= 1) return persian ? (numericDates ? "۱ هفته پیش" : "هفته پیش") : (numericDates ? "1w" : "Last week");
  if (difference.inDays >= 2) return persian ? "${n(difference.inDays)} روز پیش" : "${difference.inDays}d";
  if (difference.inDays >= 1) return persian ? (numericDates ? "۱ روز پیش" : "دیروز") : (numericDates ? "1d" : "Yesterday");
  if (difference.inHours >= 2) return persian ? "${n(difference.inHours)} ساعت پیش" : "${difference.inHours}h";
  if (difference.inHours >= 1) return persian ? (numericDates ? "۱ ساعت پیش" : "یک ساعت پیش") : (numericDates ? "1h" : "An hour ago");
  if (difference.inMinutes >= 2) return persian ? "${n(difference.inMinutes)} دقیقه پیش" : "${difference.inMinutes}m";
  if (difference.inMinutes >= 1) return persian ? (numericDates ? "۱ دقیقه پیش" : "یک دقیقه پیش") : (numericDates ? "1m" : "A minute ago");
  if (difference.inSeconds >= 3) return persian ? "${n(difference.inSeconds)} ثانیه پیش" : "${difference.inSeconds}s";
  return persian ? "همین الان" : "Just now";
}