Get Last Month Date In Flutter / Dart

前端 未结 6 1207
故里飘歌
故里飘歌 2021-01-11 18:37

in flutter we can get current month using this

var now = new DateTime.now();
var formatter = new DateFormat(\'MM\');
String month = formatter.format(now);
<         


        
6条回答
  •  萌比男神i
    2021-01-11 18:54

    Dates are pretty hard to calculate. There is an open proposal to add support for adding years and months here https://github.com/dart-lang/sdk/issues/27245.

    There is a semantic problem with adding months and years in that "a month" and "a year" isn't a specific amount of time. Years vary by one day, months by up to three days. Adding "one month" to the 30th of January is ambiguous. We can do it, we just have to pick some arbitrary day between the 27th of February and the 2nd of March. That's why we haven't added month and year to Duration - they do not describe durations.

    You can use the below code to add months in a arbitrary fashion (I presume its not completely accurate. Taken from the issue)

    const _daysInMonth = const [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    
    bool isLeapYear(int value) =>
        value % 400 == 0 || (value % 4 == 0 && value % 100 != 0);
    
    int daysInMonth(int year, int month) {
      var result = _daysInMonth[month];
      if (month == 2 && isLeapYear(year)) result++;
      return result;
    }
    
    DateTime addMonths(DateTime dt, int value) {
      var r = value % 12;
      var q = (value - r) ~/ 12;
      var newYear = dt.year + q;
      var newMonth = dt.month + r;
      if (newMonth > 12) {
        newYear++;
        newMonth -= 12;
      }
      var newDay = min(dt.day, daysInMonth(newYear, newMonth));
      if (dt.isUtc) {
        return new DateTime.utc(
            newYear,
            newMonth,
            newDay,
            dt.hour,
            dt.minute,
            dt.second,
            dt.millisecond,
            dt.microsecond);
      } else {
        return new DateTime(
            newYear,
            newMonth,
            newDay,
            dt.hour,
            dt.minute,
            dt.second,
            dt.millisecond,
            dt.microsecond);
      }
    }
    

提交回复
热议问题