relativeTime function
String
relativeTime(
- DateTime? date, {
- DateTime? reference,
- RelativeTimeConfig config = const RelativeTimeConfig(),
Implementation
String relativeTime(
DateTime? date, {
DateTime? reference,
RelativeTimeConfig config = const RelativeTimeConfig(),
}) {
if (date == null) return '';
final now = reference ?? DateTime.now();
final difference = date.difference(now);
final seconds = difference.inSeconds.abs();
final minutes = difference.inMinutes.abs();
final hours = difference.inHours.abs();
final days = difference.inDays.abs();
final weeks = (days / 7).floor();
final months = (days / 30).floor();
final years = (days / 365).floor();
final isFuture = difference.inSeconds > 0;
// Treat as "now"
if (config.nowThresholdSeconds != null &&
seconds <= config.nowThresholdSeconds!) {
return _format(config, TimeUnit.now, 0, isFuture);
}
// Treat as "today"
if (config.useToday &&
date.year == now.year &&
date.month == now.month &&
date.day == now.day) {
return _format(config, TimeUnit.today, 0, isFuture);
}
// Yesterday or Tomorrow
if (days == 1) {
if (!isFuture) return _format(config, TimeUnit.yesterday, 0, isFuture);
return _format(config, TimeUnit.tomorrow, 0, isFuture);
}
TimeUnit unit;
int value;
if (seconds < 60) {
unit = TimeUnit.second;
value = seconds;
} else if (minutes < 60) {
unit = TimeUnit.minute;
value = minutes;
} else if (hours < 24) {
unit = TimeUnit.hour;
value = hours;
} else if (days < 7) {
unit = TimeUnit.day;
value = days;
} else if (days < 30) {
unit = TimeUnit.week;
value = weeks;
} else if (days < 365) {
unit = TimeUnit.month;
value = months;
} else {
unit = TimeUnit.year;
value = years;
}
return _format(config, unit, value, isFuture);
}