formatDate function

String formatDate(
  1. DateTime date,
  2. List<String> formats,
  3. LocaleType locale
)

Implementation

String formatDate(DateTime date, List<String> formats, LocaleType locale) {
  if (formats.first == ymdw) {
    final now = DateTime.now();
    if (date.year == now.year &&
        date.month == now.month &&
        date.day == now.day) {
      //today
      return i18nObjInLocale(locale)['today'] as String;
    } else if (date.year == now.year) {
      if (locale == LocaleType.zh) {
        return formatDate(date, [mm, '月', dd, '日 ', D], locale);
      } else if (locale == LocaleType.nl) {
        return formatDate(date, [D, ' ', dd, ' ', M], locale);
      } else if (locale == LocaleType.ko) {
        return formatDate(date, [mm, '월', dd, '일 ', D], locale);
      } else if (locale == LocaleType.de) {
        return formatDate(date, [D, ', ', dd, '. ', M], locale);
      } else if (locale == LocaleType.id) {
        return formatDate(date, [D, ', ', dd, ' ', M], locale);
      } else if (locale == LocaleType.jp) {
        return formatDate(date, [mm, '月', dd, '日', D], locale);
      } else if (locale == LocaleType.si) {
        return formatDate(date, [D, ', ', dd, '. ', M, '.'], locale);
      } else if (locale == LocaleType.gr) {
        return formatDate(date, [D, ' ', dd, ' ', M], locale);
      } else {
        return formatDate(date, [D, ' ', M, ' ', dd], locale);
      }
    } else {
      if (locale == LocaleType.zh) {
        return formatDate(date, [yyyy, '年', mm, '月', dd, '日 ', D], locale);
      } else if (locale == LocaleType.nl) {
        return formatDate(date, [D, ' ', dd, ' ', M, ' ', yyyy], locale);
      } else if (locale == LocaleType.ko) {
        return formatDate(date, [yyyy, '년', mm, '월', dd, '일 ', D], locale);
      } else if (locale == LocaleType.de) {
        return formatDate(date, [D, ', ', dd, '. ', M, ' ', yyyy], locale);
      } else if (locale == LocaleType.id) {
        return formatDate(date, [D, ', ', dd, ' ', M, ' ', yyyy], locale);
      } else if (locale == LocaleType.jp) {
        return formatDate(date, [yyyy, '年', mm, '月', dd, '日', D], locale);
      } else if (locale == LocaleType.si) {
        return formatDate(date, [D, ', ', dd, '. ', M, '. ', yyyy], locale);
      } else if (locale == LocaleType.gr) {
        return formatDate(date, [D, ' ', dd, ' ', M, ' ', yyyy], locale);
      } else {
        return formatDate(date, [D, ' ', M, ' ', dd, ', ', yyyy], locale);
      }
    }
  }

  final sb = new StringBuffer();

  for (String format in formats) {
    if (format == yyyy) {
      sb.write(digits(date.year, 4));
    } else if (format == yy) {
      sb.write(digits(date.year % 100, 2));
    } else if (format == mm) {
      sb.write(digits(date.month, 2));
    } else if (format == m) {
      sb.write(date.month);
    } else if (format == MM) {
      final monthLong =
          i18nObjInLocaleLookup(locale, 'monthLong', date.month - 1);
      sb.write(monthLong);
    } else if (format == M) {
      final monthShort =
          i18nObjInLocaleLookup(locale, 'monthShort', date.month - 1);
      sb.write(monthShort);
    } else if (format == dd) {
      sb.write(digits(date.day, 2));
    } else if (format == d) {
      sb.write(date.day);
    } else if (format == w) {
      sb.write((date.day + 7) ~/ 7);
    } else if (format == W) {
      sb.write((dayInYear(date) + 7) ~/ 7);
    } else if (format == WW) {
      sb.write(digits((dayInYear(date) + 7) ~/ 7, 2));
    } else if (format == D) {
      String day = i18nObjInLocaleLookup(locale, 'day', date.weekday - 1);
      if (locale == LocaleType.ko) {
        day = "($day)";
      }
      sb.write(day);
    } else if (format == HH) {
      sb.write(digits(date.hour, 2));
    } else if (format == H) {
      sb.write(date.hour);
    } else if (format == hh) {
      sb.write(digits(date.hour % 12, 2));
    } else if (format == h) {
      sb.write(date.hour % 12);
    } else if (format == am) {
      sb.write(date.hour < 12
          ? i18nObjInLocale(locale)['am']
          : i18nObjInLocale(locale)['pm']);
    } else if (format == nn) {
      sb.write(digits(date.minute, 2));
    } else if (format == n) {
      sb.write(date.minute);
    } else if (format == ss) {
      sb.write(digits(date.second, 2));
    } else if (format == s) {
      sb.write(date.second);
    } else if (format == SSS) {
      sb.write(digits(date.millisecond, 3));
    } else if (format == S) {
      sb.write(date.second);
    } else if (format == uuu) {
      sb.write(digits(date.microsecond, 2));
    } else if (format == u) {
      sb.write(date.microsecond);
    } else if (format == z) {
      if (date.timeZoneOffset.inMinutes == 0) {
        sb.write('Z');
      } else {
        if (date.timeZoneOffset.isNegative) {
          sb.write('-');
          sb.write(digits((-date.timeZoneOffset.inHours) % 24, 2));
          sb.write(digits((-date.timeZoneOffset.inMinutes) % 60, 2));
        } else {
          sb.write('+');
          sb.write(digits(date.timeZoneOffset.inHours % 24, 2));
          sb.write(digits(date.timeZoneOffset.inMinutes % 60, 2));
        }
      }
    } else if (format == Z) {
      sb.write(date.timeZoneName);
    } else {
      sb.write(format);
    }
  }

  return sb.toString();
}