calculate method
String method calculate
takes date1 and date2
and return String value Date Difference
Implementation
String calculate(DateTime date1, DateTime date2) {
var oldDate = date1.isBefore(date2) ? date1 : date2;
var newDate = date1.isAfter(date2) ? date1 : date2;
newDate = newDate.add(const Duration(seconds: 1));
var diff = date2.difference(date1).abs();
int yearCount = 0,
monthCount = 0,
dayCount = 0,
hourCount = 0,
minuteCount = 0;
if (diff.inDays < 28) {
dayCount = diff.inDays;
hourCount = diff.inHours % 24;
minuteCount = diff.inMinutes % 60;
} else {
while (true) {
if (DateTime(oldDate.year + 1, oldDate.month, oldDate.day)
.isBefore(newDate)) {
oldDate = DateTime(oldDate.year + 1, oldDate.month, oldDate.day);
yearCount++;
} else if ((oldDate.month == 12
? DateTime(oldDate.year + 1, 1, oldDate.day)
: DateTime(oldDate.year, oldDate.month + 1, oldDate.day))
.isBefore(newDate)) {
oldDate = oldDate.month == 12
? DateTime(oldDate.year + 1, 1, oldDate.day)
: DateTime(oldDate.year, oldDate.month + 1, oldDate.day);
monthCount++;
} else {
if (FlutterDateDifferenceHelper.getDayCountInMonth(
oldDate.year, oldDate.month) <
oldDate.day + 1) {
if ((oldDate.month + monthCount == 12
? DateTime(oldDate.year + 1, 1, 1)
: DateTime(oldDate.year, oldDate.month + 1, 1))
.isBefore(newDate)) {
oldDate = oldDate.month + monthCount == 12
? DateTime(oldDate.year + 1, 1, 1)
: DateTime(oldDate.year, oldDate.month + 1, 1);
dayCount++;
} else {
break;
}
} else if (DateTime(oldDate.year, oldDate.month, oldDate.day + 1)
.isBefore(newDate)) {
oldDate = DateTime(oldDate.year, oldDate.month, oldDate.day + 1);
dayCount++;
} else {
break;
}
}
}
}
return FlutterDateDifferenceHelper.countsToString(
yearCount, monthCount, dayCount, hourCount, minuteCount);
}