Мне нужно найти разницу в днях между двумя датами.
Например:
Вход: **startDate** = 12-31-2012 23hr:59mn:00sec, **endDate** = 01-01-2013 00hr:15mn:00sec
Ожидаемый результат: 1
Я попробовал следующее:
-
(dt1-dt2).TotalDays
и преобразовать в целое число, но не дал мне подходящего ответа, поскольку double должен быть преобразован в int-try Math.Ceiling, Convert.To... -
dt1.day - dt2.day
не работает в течение нескольких месяцев. -
dt.Substract()
имеет тот же результат, что и вариант 1, упомянутый выше.
Ничего из этого не было сделано, поэтому я написал следующий код. Код работает хорошо, но я чувствую, что должно быть решение только с несколькими строками кода.
public static int GetDifferenceInDaysX(this DateTime startDate, DateTime endDate)
{
//Initializing with 0 as default return value
int difference = 0;
//If either of the dates are not set then return 0 instead of throwing an exception
if (startDate == default(DateTime) | endDate == default(DateTime))
return difference;
//If the dates are same then return 0
if (startDate.ToShortDateString() == endDate.ToShortDateString())
return difference;
//startDate moving towards endDate either with increment or decrement
while (startDate.AddDays(difference).ToShortDateString() != endDate.ToShortDateString())
{
difference = (startDate < endDate) ? ++difference : --difference;
}
return difference;
}
Примечание. У меня нет проблем с производительностью в итерации while-цикла, так как максимальная разница не будет более 30-45 дней.