jalaliToGregorian method
dynamic
jalaliToGregorian(
- int? y,
- int? m,
- int? d, {
- bool toDateTime = false,
- String? separator,
})
Implementation
jalaliToGregorian(int? y, int? m, int? d,
{bool toDateTime = false, String? separator}) {
if (y == null || m == null || d == null) return;
int gY;
if (y > 979) {
gY = 1600;
y -= 979;
} else {
gY = 621;
}
var days = (365 * y) +
((y / 33).floor() * 8) +
(((y % 33) + 3) / 4) +
78 +
d +
(((m < 7) ? (m - 1) * 31 : (((m - 7) * 30) + 186)));
gY += 400 * (days ~/ 146097);
days %= 146097;
if (days.floor() > 36524) {
gY += 100 * (--days ~/ 36524);
days %= 36524;
if (days >= 365) days++;
}
gY += 4 * (days ~/ 1461);
days %= 1461;
gY += (days - 1) ~/ 365;
if (days > 365) days = (days - 1) % 365;
var gD = (days + 1).floor();
var montDays = [
0,
31,
(((gY % 4 == 0) && (gY % 100 != 0)) || (gY % 400 == 0)) ? 29 : 28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31
];
int i = 0;
for (; i <= 12; i++) {
if (gD <= montDays[i]) break;
gD -= montDays[i];
}
if (toDateTime) return DateTime(gY, i, gD);
var gregorianDate;
if (separator == null)
gregorianDate = [gY, i, gD];
else
gregorianDate = "$gY$separator$i$separator$gD";
return gregorianDate;
}