datetime_extensions.dart 1.6 KB

123456789101112131415161718192021222324252627282930313233343536
  1. extension TimeAgoExtension on DateTime {
  2. String timeAgo({bool numericDates = true}) {
  3. DateTime date = toLocal();
  4. final date2 = DateTime.now().toLocal();
  5. final difference = date2.difference(date);
  6. if (difference.inSeconds < 5) {
  7. return 'Just now';
  8. } else if (difference.inSeconds < 60) {
  9. return '${difference.inSeconds} seconds ago';
  10. } else if (difference.inMinutes <= 1) {
  11. return (numericDates) ? '1 minute ago' : 'A minute ago';
  12. } else if (difference.inMinutes < 60) {
  13. return '${difference.inMinutes} minutes ago';
  14. } else if (difference.inHours <= 1) {
  15. return (numericDates) ? '1 hour ago' : 'An hour ago';
  16. } else if (difference.inHours < 60) {
  17. return '${difference.inHours} hours ago';
  18. } else if (difference.inDays <= 1) {
  19. return (numericDates) ? '1 day ago' : 'Yesterday';
  20. } else if (difference.inDays < 6) {
  21. return '${difference.inDays} days ago';
  22. } else if ((difference.inDays / 7).ceil() <= 1) {
  23. return (numericDates) ? '1 week ago' : 'Last week';
  24. } else if ((difference.inDays / 7).ceil() < 4) {
  25. return '${(difference.inDays / 7).ceil()} weeks ago';
  26. } else if ((difference.inDays / 30).ceil() <= 1) {
  27. return (numericDates) ? '1 month ago' : 'Last month';
  28. } else if ((difference.inDays / 30).ceil() < 30) {
  29. return '${(difference.inDays / 30).ceil()} months ago';
  30. } else if ((difference.inDays / 365).ceil() <= 1) {
  31. return (numericDates) ? '1 year ago' : 'Last year';
  32. }
  33. return '${(difference.inDays / 365).floor()} years ago';
  34. }
  35. }