Hello every one!

Ok, im studying for a exam and having some problem with understandig one thing.
Code:
class Date
{
        private static int[] daysInMonth =
        new int[13] { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        private int year = 1, month = 1, day = 1;

        public int Year { get { return year; } }
        public int Month { get { return month; } }
        public int Day { get { return day; } }

        public Date(int y, int m, int d)
        {
            year = y; month = m; day = d;
            Validate();
        }

        private bool IsLeapYear()
        { // ger sant om ºaret Äar ett skottºar
            return ((Year % 4 == 0 && Year % 100 != 0) || Year % 400 == 0);
        }
        private int GetDaysInMonth()
        {
            if (Month == 2 && IsLeapYear()) { return 29; }
            else return daysInMonth[Month];
        }

        private void Validate()
        {
            if (Year < 1) year = 1;
            if (Month < 1 || Month > 12) month = 1;
            if (Day < 1 || Day > GetDaysInMonth()) day = 1;
        }
        
        public void Set(int y, int m, int d)
        {
            year = y; month = m; day = d;
            Validate();
        }

        public override string ToString()
        {
            return Year + "-" + Month + "-" + Day;
        }

        public static int operator -(Date date1, Date date2)
        {
            int count=0;

            //Ok, here i want to use && instead of || cuz the thing i want to do is to 
            //loop this until date2 match date1 which it does when both conditions are 
            //fulfilled. In short, why doesent && work?       
            while (date2.month != date1.month || date2.day != date1.day)
            {
                count++;
                date2.day++;
                date2.Validate();

                if (date2.day == 1)
                    date2.month++;
            }

            return count;
        }
}