2014-02-06 3 views
1

В C#,Как определить, находится ли дата между датами текущей недели?

Как мы проверяем определенную дату с датами недели?

Например: 6/02/2014

Текущие Недели: 02/02/2014 - 08/02/2014

так это даты с в неделю выше ....

+2

Как вы думаете неделю начинается? В воскресенье? В понедельник? –

+1

Это не на 100% понятно, что вы просите. Можете ли вы предоставить более подробное описание? – Sean

+0

Возможный дубликат: http://stackoverflow.com/questions/21599895/find-the-current-week-from-datetime-now-and-how-to-find-given-date-between-curre (тот же автор) – Atiris

ответ

1

хмм

public bool isBetween(DateTime input, DateTime date1, DateTime date2) 
    { 
     if (input > date1 && input < date2) 
      return true; 
     else 
      return false; 
    } 

?

вход = ваша дата date1 & date2 = начало и конец недели

+0

в вышеуказанный только, к примеру.Нам нужно найти первый ват - все текущие дни недели, тогда нужно проверить соответствующую дату? – user1941948

+0

Да, но это очень простая задача. Вы можете получить текущий день недели, и из этого вы можете рассчитывать дату начала и окончания даты – szpic

0

Как насчет:

bool inRange = (date >= lowerDate && date <= upperDate); 
+0

Я думаю, что OP хочет получить заданную дату, в которой недели (и какие даты на этой неделе начинаются и заканчиваются). Конечно, вопрос не совсем понятен. –

+0

@ SonerGönül - возможно. Это не на 100% ясно, что спрашивается :-( – Sean

2

Используйте это для проверки (последний параметр не является обязательным, если вы хотите всегда 1 неделю от FromDate , вам не нужно использовать последний параметр):

public static bool DateInside(DateTime checkDate, 
    DateTime fromDate, DateTime? lastDate = null) 
{ 
    DateTime toDate = lastDate != null ? lastDate.Value : fromDate.AddDays(6d); 
    return checkDate >= fromDate && checkDate <= toDate; 
} 

Для вызова использования:

bool isDateInside = DateInside(new DateTime(2014, 02, 06), 
    new DateTime(2014, 02, 02)); // return true 

И поиск первый :) Ответ также здесь: How to check whether C# DateTime is within a range

Если вы хотите проверки, если даты в той же неделе, то вы можете использовать это:

public static bool DateInsideOneWeek(DateTime checkDate, DateTime referenceDate) 
{ 
    // get first day of week from your actual culture info, 
    DayOfWeek firstWeekDay = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; 
    // or you can set exactly what you want: firstWeekDay = DayOfWeek.Monday; 
    // calculate first day of week from your reference date 
    DateTime startDateOfWeek = referenceDate; 
    while(startDateOfWeek.DayOfWeek != firstWeekDay) 
    { startDateOfWeek = startDateOfWeek.AddDays(-1d); } 
    // fist day of week is find, then find last day of reference week 
    DateTime endDateOfWeek = startDateOfWeek.AddDays(6d); 
    // and check if checkDate is inside this period 
    return checkDate >= startDateOfWeek && checkDate <= endDateOfWeek; 
} 

Actual неделя в моей информации о культуре начинается с понедельника, 3 февраля 2014 года (так что для меня неделя между 3 февраля и 9 февраля). Если я проверить любую дату с датой отсчета (второй параметр), как сегодня (2014-февраль-06) я получаю этот результат:

For 2014-Feb-02 (Sunday before this week): false 
For 2014-Feb-03 (Monday inside this week): true 
For 2014-Feb-06 (Today inside this week): true 
For 2014-Feb-09 (Sunday inside this week): true 
For 2014-Feb-10 (Monday next  week): false 

Вы можете вызвать этот метод, чтобы проверить, если одна дата внутри той же недели, referentional как это:

DateInsideOneWeek(new DateTime(2014, 02, 02), new DateTime(2014, 02, 06)); 

вы можете найти текущей недели даты начала и окончания с этим кодом:

DateTime startDateOfWeek = DateTime.Now.Date; // start with actual date 
while(startDateOfWeek.DayOfWeek != DayOfWeek.Monday) // set first day of week in your country 
{ startDateOfWeek = startDateOfWeek.AddDays(-1d); } // after this while loop you get first day of actual week 
DateTime endDateOfWeek = startDateOfWeek.AddDays(6d); // you just find last week day 

это ты хотел?

+0

Как мы должны найти текущую дату недели? Тогда проверьте соответствующую дату с датами недели? – user1941948

+0

Я продлил свой ответ за то, что, как я думаю, вы хотите. вы хотели, а если нет, измените свой вопрос и объясните это. – Atiris

0

Вот еще одно решение :)

public static class DateExtensions 
{ 
    private static void Swap<T>(ref T one, ref T two) 
    { 
     var temp = one; 
     one = two; 
     two = temp; 
    } 

    public static bool IsFromSameWeek(this DateTime first, DateTime second, DayOfWeek firstDayOfWeek = DayOfWeek.Monday) 
    { 
     // sort dates 
     if (first > second) 
     { 
      Swap(ref first, ref second); 
     } 

     var daysDiff = (second - first).TotalDays; 
     if (daysDiff >= 7) 
     { 
      return false; 
     } 

     const int TotalDaysInWeek = 7; 
     var adjustedDayOfWeekFirst = (int)first.DayOfWeek + (first.DayOfWeek < firstDayOfWeek ? TotalDaysInWeek : 0); 
     var adjustedDayOfWeekSecond = (int)second.DayOfWeek + (second.DayOfWeek < firstDayOfWeek ? TotalDaysInWeek : 0); 

     return adjustedDayOfWeekSecond >= adjustedDayOfWeekFirst; 
    } 
} 

Upd: он, как представляется, по крайней мере, в два раза более высокую производительность, чем решение @Atiris :)

Смежные вопросы