toTimeAgo method
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";
}