format static method
format time by millis. dateTime : millis. locDateTime: current time or schedule time. millis. locale: output key.
Implementation
static String format(
int ms, {
int? locTimeMs,
String? locale,
DayFormat? dayFormat,
}) {
int nowMs = locTimeMs ?? DateTime.now().millisecondsSinceEpoch;
String useLocale = locale ?? 'en';
TimelineInfo info = _timelineInfoMap[useLocale] ?? EnInfo();
DayFormat useDayFormat = dayFormat ?? DayFormat.common;
int elapsed = nowMs - ms;
String suffix;
if (elapsed < 0) {
suffix = info.suffixAfter();
// suffix after is empty. user just now.
if (suffix.isNotEmpty) {
elapsed = elapsed.abs();
useDayFormat = DayFormat.simple;
} else {
return info.lessThanOneMinute();
}
} else {
suffix = info.suffixAgo();
}
String timeline;
if (info.customYesterday().isNotEmpty && dateUtils.isYesterdayByMs(ms, nowMs)) {
return _getYesterday(ms, info, useDayFormat);
}
if (!dateUtils.yearIsEqualByMs(ms, nowMs)) {
timeline = _getYear(ms, useDayFormat);
if (timeline.isNotEmpty) return timeline;
}
final num seconds = elapsed / 1000;
final num minutes = seconds / 60;
final num hours = minutes / 60;
final num days = hours / 24;
if (seconds < 90) {
timeline = info.oneMinute(1);
if (suffix != info.suffixAfter() && info.lessThanOneMinute().isNotEmpty && seconds < info.maxJustNowSecond()) {
timeline = info.lessThanOneMinute();
suffix = '';
}
} else if (minutes < 60) {
timeline = info.minutes(minutes.round());
} else if (minutes < 90) {
timeline = info.anHour(1);
} else if (hours < 24) {
timeline = info.hours(hours.round());
} else {
if ((days.round() == 1 && info.keepOneDay() == true) || (days.round() == 2 && info.keepTwoDays() == true)) {
useDayFormat = DayFormat.simple;
}
timeline = _formatDays(ms, days.round(), info, useDayFormat);
suffix = (useDayFormat == DayFormat.simple ? suffix : '');
}
return timeline + suffix;
}