Подтвердить что ты не робот

Разница DateTime в днях на основе только даты

Мне нужно найти разницу в днях между двумя датами.

Например:

Вход: **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 дней.

4b9b3361

Ответ 1

Ну, похоже, вы хотите разницу в количестве дней, игнорируя компонент времени. A DateTime с компонентом времени reset до 00:00:00 - это свойство Date дает вам:

(startDate.Date - endDate.Date).TotalDays

Ответ 2

Если вы используете свойство DateTime.Date, это устранит время

date1.Date.Subtract(date2.Date).Days

Ответ 3

Используйте TimeStamp. Просто вычтите две даты (используя DateTime.Date свойство), получите разницу во времени и возвращайте TotalDays

TimeSpan ts = endDate.Date - startDate.Date;
double TotalDays = ts.TotalDays;

Таким образом, ваш метод расширения может быть таким же простым, как:

public static int GetDifferenceInDaysX(this DateTime startDate, DateTime endDate)
    {
      return (int) (endDate.Date - startDate.Date).TotalDays;
      // to return just a int part of the Total days, you may round it according to your requirement
    }

EDIT:. Поскольку вопрос был отредактирован, вы можете проверить следующий пример. Рассмотрим следующие две даты.

DateTime startDate = new DateTime(2012, 12, 31, 23, 59, 00);
DateTime endDate = new DateTime(2013, 01, 01, 00, 15, 00); 

Вы можете написать метод расширения как:

public static int GetDifferenceInDaysX(this DateTime startDate, DateTime endDate)
    {
        TimeSpan ts = endDate - startDate;
        int totalDays = (int) Math.Ceiling(ts.TotalDays);
        if (ts.TotalDays < 1 && ts.TotalDays > 0)
            totalDays = 1;
        else
            totalDays = (int) (ts.TotalDays);
        return totalDays;
    }

В указанные выше даты вы получите 1