How to display time ago like Youtube in Flutter

I'm writing a flutter app to clone some Youtube functionalities using Youtube API V3.

The app fetches video timestamp as a String from youtube video API

Each timestamp has this format :

YYYY-MM-DDTHH:MM:SSZ

One example would be:

2020-07-12T20:42:19Z

I would like to display in a text :

  • 1 hour
  • 1 hours ago
  • 4 weeks ago
  • 11 months ago
  • 1 year ago
  • ...

2 Answers

I've created an extension on String

 extension StringExtension on String { static String displayTimeAgoFromTimestamp(String timestamp) { final year = int.parse(timestamp.substring(0, 4)); final month = int.parse(timestamp.substring(5, 7)); final day = int.parse(timestamp.substring(8, 10)); final hour = int.parse(timestamp.substring(11, 13)); final minute = int.parse(timestamp.substring(14, 16)); final DateTime videoDate = DateTime(year, month, day, hour, minute); final int diffInHours = DateTime.now().difference(videoDate).inHours; String timeAgo = ''; String timeUnit = ''; int timeValue = 0; if (diffInHours < 1) { final diffInMinutes = DateTime.now().difference(videoDate).inMinutes; timeValue = diffInMinutes; timeUnit = 'minute'; } else if (diffInHours < 24) { timeValue = diffInHours; timeUnit = 'hour'; } else if (diffInHours >= 24 && diffInHours < 24 * 7) { timeValue = (diffInHours / 24).floor(); timeUnit = 'day'; } else if (diffInHours >= 24 * 7 && diffInHours < 24 * 30) { timeValue = (diffInHours / (24 * 7)).floor(); timeUnit = 'week'; } else if (diffInHours >= 24 * 30 && diffInHours < 24 * 12 * 30) { timeValue = (diffInHours / (24 * 30)).floor(); timeUnit = 'month'; } else { timeValue = (diffInHours / (24 * 365)).floor(); timeUnit = 'year'; } timeAgo = timeValue.toString() + ' ' + timeUnit; timeAgo += timeValue > 1 ? 's' : ''; return timeAgo + ' ago'; }
}

Then call in text:

StringExtension.displayTimeAgoFromTimestamp(video.timestamp)

You can use the timeago package

example code below

import 'package:timeago/timeago.dart' as timeago;
main() { final fifteenAgo = new DateTime.now().subtract(new Duration(minutes: 15)); print(timeago.format(fifteenAgo)); // 15 minutes ago print(timeago.format(fifteenAgo, locale: 'en_short')); // 15m print(timeago.format(fifteenAgo, locale: 'es')); // hace 15 minutos
}

to use it with the YYYY-MM-DDTHH:MM:SSZ time format you can convert the String to a DateTime then perform the operation on the DateTime variable

DateTime time = DateTime.parse("2020-07-12T20:42:19Z");
print(timeago.format(time));
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like