PersianDate.fromDateTime constructor
PersianDate.fromDateTime(
- DateTime date
Creates a PersianDate from the equivalent DateTime.
Implementation
factory PersianDate.fromDateTime(DateTime date) {
final julianDayNumber =
_getJulianDayNumber(date.year, date.month, date.day);
final int year = date.year;
int persianYear = year - 621;
final r = _PersianDateCalculation.calculate(persianYear);
final int jdn1f = _getJulianDayNumber(year, 3, r.march);
int k = julianDayNumber - jdn1f;
// Find number of days that passed since 1 Farvardin.
if (k >= 0) {
if (k <= 185) {
// The first 6 months.
final int jm = 1 + (k ~/ 31);
final int jd = (k % 31) + 1;
return PersianDate(persianYear, jm, jd);
} else {
// The remaining months.
k -= 186;
}
} else {
// Previous Persian year.
persianYear -= 1;
k += 179;
if (r.leap == 1) k += 1;
}
final int jm = 7 + (k ~/ 30);
final int jd = (k % 30) + 1;
return PersianDate(persianYear, jm, jd);
}