Period constructor

const Period({
  1. int years = 0,
  2. int months = 0,
  3. int days = 0,
})

Creates a period of years, months, and/or days.

The result will be normalized as follows:

  • -12 < months < 12
  • years.sign == months.sign if both are nonzero

The days field can't be normalized since the number of years or months a period of days represents varies.

Period(months: 25) == Period(years: 2, months: 1);
Period(months: 12, days: 5) == Period(years: 1, days: 5);
Period(days: 35) == Period(days: 35);  // unchanged
Period(years: -2, months: 1) == Period(years: -1, months: -11);
Period(years: 2, months: -1) == Period(years: 1, months: 11);

Implementation

const Period({int years = 0, int months = 0, int days = 0})
    : this._normalizedSign(years + months ~/ 12,
          months % 12 - (months % 12 != 0 && months < 0 ? 12 : 0), days);