formatDateRangeText function
String
formatDateRangeText(
- DateTime startTime,
- DateTime endTime,
- bool hasTimePicker,
- [IntlLocale? locale]
Gets a date range, startTime
and endTime
, and formats it's texts with locale
, trying to use less characters.
Implementation
String formatDateRangeText(
DateTime startTime, DateTime endTime, bool hasTimePicker,
[IntlLocale? locale]) {
locale ??= IntlLocale.getDefaultIntlLocale();
var startFormat = getDateFormat_yMMMd();
var endFormat = startFormat;
var sameDay = false;
if (startTime.year == endTime.year) {
if (startTime.month == endTime.month) {
if (startTime.day == endTime.day) {
sameDay = true;
} else {
if (!startFormat.pattern!.startsWith('MMM') && !hasTimePicker) {
startFormat = DateFormat('d', locale.code);
} else {
startFormat = DateFormat('MMMd', locale.code);
}
}
} else {
startFormat = DateFormat('MMMd', locale.code);
}
}
var startText = startFormat.format(startTime);
var endText = endFormat.format(endTime);
var mergeDate = sameDay || startText == endText;
var isFullDayTimeRange = startTime.hour == 0 &&
startTime.minute == 0 &&
endTime.hour == 23 &&
endTime.minute == 59;
var usesAMPM = getTimeFormatUsesAMPM(locale);
var timeFormat =
usesAMPM ? DateFormat('h:mm a', locale.code) : DateFormat.Hm();
var timeGroupOpen = usesAMPM ? '' : '[';
var timeGroupClose = usesAMPM ? '' : ']';
var hasTimeText = hasTimePicker && !isFullDayTimeRange;
String? timeStartText;
String? timeEndText;
if (hasTimeText) {
timeStartText = timeFormat.format(startTime);
timeEndText = timeFormat.format(endTime);
}
String? dateText;
if (mergeDate) {
dateText = startText;
if (hasTimeText) {
if (timeStartText == timeEndText) {
dateText += ' $timeGroupOpen${timeStartText!}$timeGroupClose';
} else {
dateText +=
' $timeGroupOpen${timeStartText!} - ${timeEndText!}$timeGroupClose';
}
}
} else {
if (hasTimeText) {
startText += ' $timeGroupOpen${timeStartText!}$timeGroupClose';
endText += ' $timeGroupOpen${timeEndText!}$timeGroupClose';
}
dateText = '$startText - $endText';
}
return dateText;
}