2015-01-07 7 views
2

Я пытаюсь вычислить разницу МЕСЯЦ между одной колонкой даты и сегодня. У нас есть какой-либо метод в csharp, например monthdiff или lateiff, чтобы достичь этой функции? Проблема с моим кодом заключается в том, что дата представления даты отличается от другой.Разница месяцев между 2 датами

bool isDateAccepted = ((SubmissionDate.Month - DateTime.Now.Month) < 6) 

ответ

3

Вы всегда можете добавить 6 месяцев до даты подачи, и сравнить его с текущей датой.

bool isDateAccepted = (submissionDate.AddMonths(6) > DateTime.Now); 
+0

Очень элегантное решение, если OP хочет занять день месяца в аккаунте. – weston

3

Не напрямую сравнить Month переменные, как он будет ломаться, когда номер месяца «оборачивает», как вы заметили.

Вместо вычесть DateTime объекты, чтобы получить TimeSpan затем использовать чтоTotalDays свойство:

bool isDateAccepted = ((SubmissionDate - DateTime.Now).TotalDays < 6 * 30) 

TimeSpan не считает Months, так что вы должны определить среднее число дней в порядке чтобы проверить количество месяцев.

+1

Может ли downvoter оставить комментарий? Я считаю, что это правильный подход. – BradleyDotNET

+1

Я сделал это потому, что он испорчен. Возьмите 1-Мар-14, ваш метод подскажет, что даты системы с 1-го марта по 14-е-14-е-14-е годы находятся в диапазоне. Но можно было ожидать, что 29-31 августа 2014 года тоже в течение 6 месяцев. Вы можете использовать 365/2f, но также имели бы подобные ошибки. – weston

+0

@weston Справедливости ради, я согласен, что использование среднего не является «идеальным» решением (конечно, это в основном потому, что наша месячная система так же ошибочна). – BradleyDotNET

3

Вы можете рассчитать общее количество месяцев и вычесть их:

public int MonthDifference(Date a, Date b) 
{ 
    int totalMonthsA = a.Year*12 + a.Month; 
    int totalMonthsB = b.Year*12 + b.Month; 
    return totalMonthsA - totalMonthsB; 
} 
Смежные вопросы