timeElapsed static method
String timeElapsed = Mixins.timeElapsed('2021-02-24 11:12:30', inDay: 'day ago');
// put value with String or DateTime only
// only for 1 month calculation
Implementation
static String timeElapsed(dynamic dateTime,
{String? inDay,
String? inHour,
String? inMinute,
String justNow = 'just now'}) {
try {
Duration compare(DateTime x, DateTime y) => Duration(
microseconds:
(x.microsecondsSinceEpoch - y.microsecondsSinceEpoch).abs());
DateTime date = dateTime is String ? DateTime.parse(dateTime) : dateTime;
DateTime x = DateTime.now();
DateTime y = DateTime(
date.year, date.month, date.day, date.hour, date.minute, date.second);
Duration diff = compare(x, y);
String h = '${date.hour}'.padLeft(2, '0'),
m = '${date.minute}'.padLeft(2, '0'),
s = '${date.second}'.padLeft(2, '0');
String dateTimeStr =
'${date.year}-${'${date.month}'.padLeft(2, '0')}-${'${date.day}'.padLeft(2, '0')} $h:$m:$s';
// if init value more then current time
if (y.millisecondsSinceEpoch > x.millisecondsSinceEpoch) {
return '-';
}
String textInDay(int value) =>
inDay ?? (value > 1 ? 'days ago' : 'day ago');
String textInHour(int value) =>
inHour ?? (value > 1 ? 'hours ago' : 'hour ago');
String textInMinute(int value) =>
inMinute ?? (value > 1 ? 'minutes ago' : 'minute ago');
if (diff.inSeconds >= 60) {
if (diff.inMinutes >= 60) {
if (diff.inHours >= 24) {
return diff.inDays > 31
? dateTimeStr
: '${diff.inDays} ${textInDay(diff.inDays)}';
} else {
return '${diff.inHours} ${textInHour(diff.inHours)}';
}
} else {
return '${diff.inMinutes} ${textInMinute(diff.inMinutes)}';
}
} else {
return justNow;
}
} catch (e) {
rethrow;
}
}