calendar method

  1. @override
String calendar(
  1. Moment moment, {
  2. DateTime? reference,
  3. String? customFormat,
  4. bool omitHours = false,
  5. bool omitHoursIfDistant = true,
})
inherited

Calendar string

Implementation

@override
String calendar(
  Moment moment, {
  DateTime? reference,
  String? customFormat,
  bool omitHours = false,
  bool omitHoursIfDistant = true,
}) {
  reference ??= Moment.nowWithTimezone(moment.isUtc);

  late final String dateString;

  final int deltaDays = moment.differenceInDays(reference);
  final String? deltaDaysName =
      complexCalendarData.relativeDayNames[deltaDays];

  if (deltaDaysName != null) {
    dateString = deltaDaysName;
  } else {
    /// If it occured before [reference]
    if (moment < reference) {
      final DateTime weekBefore = reference.subtract(const Duration(days: 7));

      if (moment.isBefore(weekBefore)) {
        if (omitHoursIfDistant) {
          omitHours = true;
        }

        dateString = moment.format(
          customFormat ?? MomentLocalization.localizationDefaultDateFormat,
        );
      } else {
        dateString = complexCalendarData.keywords.lastWeekday(
          moment,
          reference: reference,
        );
      }
    }

    /// If it occured after [reference]
    else {
      final DateTime weekAfter = reference.add(const Duration(days: 7));

      /// If it's this or next week (relative to the reference)
      if (moment.isBefore(weekAfter)) {
        dateString = complexCalendarData.keywords.nextWeekday(
          moment,
          reference: reference,
        );
      } else {
        if (omitHoursIfDistant) {
          omitHours = true;
        }

        dateString = moment.format(
          customFormat ?? MomentLocalization.localizationDefaultDateFormat,
        );
      }
    }
  }

  if (customFormat != null) return dateString;

  if (omitHours) {
    return dateString;
  }

  return complexCalendarData.keywords.at(
    moment,
    dateString,
    calendarTime(moment),
    reference: reference,
  );
}