Проблема в том, что DateTime
не представляет даты, а представляет моменты времени, которые включают даты. Когда вы пишете «2 мая 2018 года», DateTime
представляет его как «Полночь 2 мая 2018 года». Когда вы вычитаете endDate
из startDate
, вы вычисляете количество времени, прошедшего между полуночью 2 мая и 8 мая, которое составляет ровно 6.
Поскольку вы хотите включить оба конца в свои вычисления, вам нужно добавить 1 день к результату:
var from = new DateTime(2018, 5, 2);
var to = new DateTime(2018, 5, 8);
var diff = to.Date - from.Date + TimeSpan.FromDays(1);
Console.WriteLine(diff.TotalDays); // Prints 7