format static method
String
format(
- DateTime dateTime, {
- RealtimeTextFormats? formats,
- RealtimeOptions? options,
- String separator = " at ",
- String time(
- DateTime date
- String date(
- DateTime date
Implementation
static String format(
DateTime dateTime, {
RealtimeTextFormats? formats,
RealtimeOptions? options,
String separator = " at ",
String Function(DateTime date)? time,
String Function(DateTime date)? date,
}) {
formats = Realtime.formats.merge(formats);
options = Realtime.options.merge(options);
time ??= Realtime.time;
date ??= Realtime.date;
final rt = Realtime.parse(dateTime);
final diff = rt.diff;
String suffix = rt.future
? options.after
? ' ${formats.after}'
: ''
: options.ago
? ' ${formats.ago}'
: '';
if (!options.today &&
options.now &&
options.onSeconds == null &&
diff.inSeconds <= options.nowShowingBeforeSeconds) {
return formats.now;
}
if (!options.today && options.second && diff.inSeconds < 60) {
final seconds = diff.inSeconds;
if (options.onSeconds != null) {
return options.onSeconds!(rt);
}
return "$seconds ${formats.second.apply(seconds)}$suffix";
}
if (!options.today && options.minute && diff.inMinutes < 60) {
final minutes = diff.inMinutes;
if (options.onMinutes != null) {
return options.onMinutes!(rt);
}
return "$minutes ${formats.minute.apply(minutes)}$suffix";
}
if (!options.today && options.hour && diff.inHours < 24) {
final hours = diff.inHours;
if (options.onHours != null) return options.onHours!(rt);
return "$hours ${formats.hour.apply(hours)}$suffix";
}
if (options.today && diff.inDays == 0) {
if (options.onToday != null) options.onToday!(rt);
if (time == null) return formats.today;
final t = time(dateTime);
return "${formats.today}$separator$t";
}
if ((options.tomorrow || options.yesterday) && diff.inDays == 1) {
if (rt.future) {
if (options.tomorrow) {
if (options.onTomorrow != null) return options.onTomorrow!(rt);
if (time == null) return formats.tomorrow;
final t = time(dateTime);
return "${formats.tomorrow}$separator$t";
}
} else {
if (options.yesterday) {
if (options.onYesterday != null) return options.onYesterday!(rt);
if (time == null) return formats.yesterday;
final t = time(dateTime);
return "${formats.yesterday}$separator$t";
}
}
}
if (options.day && diff.inDays < 7) {
final days = diff.inDays;
if (options.onDays != null) return options.onDays!(rt);
return "$days ${formats.day.apply(days)}$suffix";
}
if (options.week && diff.inDays < 30) {
final weeks = (diff.inDays / 7).floor();
if (options.onWeeks != null) return options.onWeeks!(rt);
return "$weeks ${formats.week.apply(weeks)}$suffix";
}
if (options.month && diff.inDays < 365) {
final months = (diff.inDays / 30).floor();
if (options.onMonths != null) return options.onMonths!(rt);
return "$months ${formats.month.apply(months)}$suffix";
}
if (options.year || date == null) {
final years = (diff.inDays / 365).floor();
if (options.onYears != null) return options.onYears!(rt);
return "$years ${formats.year.apply(years)}$suffix";
}
return date(dateTime);
}