2014-02-06 39 views
1

在C#中,如何确定日期是否在当前星期日期之间?

我们如何在周日期检查某个日期?

例如:2014年6月2日

当前周:2014年2月2日 - 2014年8月2日

所以这个日期是在上述周....

+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

HMM

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

输入=您的日期 日期1 &日期2 =开始,每周

+0

。我们需要找到第一个星期都是当前的一周,然后需要检查相应的给定日期吗? – user1941948

+0

是的,但这是非常简单的任务。你可以得到一周的当前日期,从这里你可以计算开始日期和结束日期 – szpic

0

如何结束:

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

我认为OP想要给出的日期有哪些星期(以及本周开始和结束的日期是什么)。当然,问题根本不明确.. –

+0

@SonerGönül - 可能。这是不是100%清楚要问什么:-( – Sean

2

使用此办理登机手续(最后一个参数,如果你想从FROM日期始终为1周是可选,你不需要使用最后一个参数):

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; 
} 

实际周我的文化信息从2014年2月3日星期一开始(对我来说是2月3日到2月9日的一周)。如果我请与基准日(第二个参数)的任何日期今天(2014-FEB-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解决方案至少两次更好的性能:)

相关问题