2011-12-14 2 views
0

tl; dr; Как вы принимаете StartDate-DateTime: 10 декабря 2011 года, EndDate-DateTime 15 января 2012 года и определите, будет ли Dec 1, Dec 9, Dec 17, Dec 25, Jan 1 и Jan 9 вписаться в TimeSpan, исключенный год и получить Bool для каждого из них?Проверьте, существует ли День месяца между двумя DateTime, независимо от года

У меня есть визуальный промежуток времени, состоящий из линейного графика, показывающего, когда активна конкретная активность.

enter image description here

Я даюсь объект с датой начала и дату окончания.

Я покрыл отрезок времени с ДИВ, имеющий красный фон, представляющий 1/4 каждого месяца, называя их JanQ1, JanQ2 и т.д ..

Они начинаются как видимость: скрытый, но должны быть изменены в случае, если активность активна в течение части года.

Проблема, с которой я столкнулась, заключается в получении истинного/ложного значения, которое игнорирует год.

Например, событие, которое идет от Дек 10 2011 Яну 15 2012, я хотел бы этот набор результатов:

DecQ1=False, 
DecQ2=True, 
DecQ3=True, 
DecQ4=True, 
JanQ1=True, 
JanQ2=True, 
JanQ3=False 
+2

Нормально ли это, что StartDate> EndDate? –

+0

Если год не важен, просто выполните их инициализацию с помощью 0001 (например, используйте год с DateTime.MinValue). Однако, как указывает vc 74, вам нужно действительно знать, что Jan (в следующем году) после Dec (в этом году), например. – dash

+0

StartDate всегда будет происходить до EndDate. Проблема с гомогенизацией года заключается в том, что, когда StartDate и EndDate начинаются с разных лет, но заканчиваются в том же году, true становится ложным с диапазоном дат (IE the>/ Wesley

ответ

1

Будет ли такая функция работать для вас?

bool IsDateContained(DateTime startDate, DateTime endDate, int month, int day) { 
    bool retVal = false; 
    if (startDate < endDate) { 
     do { 
      if (startDate.Month == month && startDate.Day == day) { 
       retVal = true; 
       break; 
      } 
      startDate = startDate.AddDays(1); 
     } while (startDate < endDate); 
    } else { 
     //crazy world!! 
    } 
    return retVal; 
} 
0

сделать новые объекты DateTime перед сравнением, установив их в том же году - http://msdn.microsoft.com/en-us/library/wb249tb7.aspx.

+0

Я говорил об этом выше, но мое беспокойство об изменении года - это. Если моя дата начала - декабрь 2011 года, а мой EndDate - февраль 2012 года, январь 2012 года между этими двумя. Если я буду гомогенизировать год к 2011 или 2012 году, мы теперь собираемся с февраля по декабрь, а не с декабря на февраль, а январь 2012 года вернем ложь. – Wesley