/**
  * How many weeks from the beginning or end of the month or year it is
  * (ie: January 3rd is in the first week of the year and 51 weeks from the end of the year)
  * @todo This needs to be capable of setting the "week start day", which will have an impact on this method...
  */
 public function testHowManyWeeksFromTheBeginningOrEndOfTheMonthOrYearItIs()
 {
     $date = new qCal_Date(2010, 1, 15);
     // $date->setWeekStart("Sunday");
     $this->assertEqual($date->getWeekOfYear(), 2);
     $date2 = new qCal_Date(2010, 4, 23);
     $this->assertEqual($date2->getWeekOfYear(), 16);
     // how many weeks until the end of the year?
     $date3 = new qCal_Date(2010, 12, 1);
     $this->assertEqual($date3->getWeeksUntilEndOfYear(), 4);
 }
 /**
  * Check a qCal_Date object to see if it falls within the rules specified
  * when this object was created (or added later actually).
  * @param qCal_Date The date that you want to check 
  * @return boolean True if the date falls within the ruleset
  * @access public
  */
 public function checkDate(qCal_Date $date)
 {
     return (bool) in_array($date->getWeekOfYear(), $this->getValues());
 }
 /**
  * The date object has many getters which allow for you to determine things like day of the week,
  * day of the year, etc. The following tests those getters.
  */
 public function testGetters()
 {
     $date = new qCal_Date(2009, 4, 23);
     /**
      * Month
      */
     $this->assertEqual($date->getMonth(), 4);
     $this->assertEqual($date->getMonthName(), "April");
     $this->assertEqual($date->getNumDaysInMonth(), 30);
     /**
      * Day
      */
     $this->assertEqual($date->getDay(), 23);
     $this->assertEqual($date->getYearDay(), 112);
     $this->assertEqual($date->getFirstDayOfMonth()->__toString(), "04/01/2009");
     $this->assertEqual($date->getFirstDayOfMonth()->format("l"), "Wednesday");
     $this->assertEqual($date->getLastDayOfMonth()->__toString(), "04/30/2009");
     $this->assertEqual($date->getLastDayOfMonth()->format("l"), "Thursday");
     // find the xth weekday (mon-sun) of the month
     $this->assertEqual($date->getXthWeekdayOfMonth(2)->__toString(), "04/09/2009");
     // find the second Thursday of the month (Because 4/23/2009 was on a Thursday, the weekday defaults to that. The year defaults to 2009 for basically the same reason)
     $this->assertEqual($date->getXthWeekdayOfMonth(2, "Monday")->__toString(), "04/13/2009");
     // find the second monday of the month (month defaults to april because that's what $date is currently set to)
     $this->assertEqual($date->getXthWeekdayOfMonth(2, "Monday", "January")->__toString(), "01/12/2009");
     // find the second monday in January (year defaults to 2009)
     $this->assertEqual($date->getXthWeekdayOfMonth(2, "Monday", "January", 2008)->__toString(), "01/14/2008");
     // find the second Monday in January, 2008
     // now try negatives and positives
     $this->assertEqual($date->getXthWeekdayOfMonth(-2)->__toString(), "04/23/2009");
     // get the second to last Thursday of the month
     $this->assertEqual($date->getXthWeekdayOfMonth("-2")->__toString(), "04/23/2009");
     // get the second to last Thursday of the month
     $this->assertEqual($date->getXthWeekdayOfMonth(+2)->__toString(), "04/09/2009");
     // surprisingly, this works... interesting...
     $this->assertEqual($date->getXthWeekdayOfMonth("+2")->__toString(), "04/09/2009");
     // we can also use numbers instead of spelling out the names of weekdays and months. For the weekday part, use 0 for Sunday through 6 for Saturday (the same as PHP's date function's "w" metacharacter)
     $this->assertEqual($date->getXthWeekdayOfMonth(2, 1)->__toString(), "04/13/2009");
     // second monday
     $this->assertEqual($date->getXthWeekdayOfMonth(2, 1, 1)->__toString(), "01/12/2009");
     // second monday in january
     $this->assertEqual($date->getXthWeekdayOfMonth(-2, 1)->__toString(), "04/20/2009");
     // second to last monday in april
     /**
      * Year
      */
     $this->assertEqual($date->getYear(), 2009);
     /**
      * Week
      */
     $this->assertEqual($date->getWeekDay(), 4);
     $this->assertEqual($date->getWeekDayName(), "Thursday");
     $this->assertEqual($date->getWeekOfYear(), 17);
     /**
      * Unix Timestamp
      */
     $this->assertEqual($date->getUnixTimestamp(), gmmktime(0, 0, 0, 4, 23, 2009));
 }