How do I determine if a date lies between current week dates?

前端 未结 4 1436
有刺的猬
有刺的猬 2021-01-26 20:49

In C#,

How we are check certain date with in week dates?

Eg: 6/02/2014

Current Weeks: 02/02/2014 - 08/02/2014

so this dates are with in above wee

相关标签:
4条回答
  • 2021-01-26 20:56

    How about:

    bool inRange = (date >= lowerDate && date <= upperDate);
    
    0 讨论(0)
  • 2021-01-26 20:58

    Here's another solution :)

    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: it appears to have at least twice better performance than @Atiris solution :)

    0 讨论(0)
  • 2021-01-26 21:03

    Use this for check (last parameter is optional if you want always 1 week from fromDate, you don't need use last parameter):

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

    To call use:

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

    And search first :) Answer is also here: How to check whether C# DateTime is within a range

    If you want to check if the dates are inside the same week, then you can use this:

    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 week in my culture info start with monday, February 3th 2014 (so for me is week between February 3th and February 9th). If I check any date with reference date (second parameter) as today (2014-Feb-06) I get this results:

    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
    

    You can call this method to check if one date is inside the same week as referentional like this:

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

    You can find current week start and end dates with this code:

    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
    

    Is this you wanted?

    0 讨论(0)
  • 2021-01-26 21:19

    hmm

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

    ?

    input= your date date1 & date2 = start and end of a week

    0 讨论(0)
提交回复
热议问题