public function __construct($time, $tzid = NULL) { $this->start = day_of($time, $tzid); // define the end of the day by 11:59:59pm $this->end = increment_day($this->start) - 1; }
public static function get_term($time=NULL) { if ($time === NULL) $time = time(); if (self::$terms === NULL) { // if we're in the second half of the year, use next year's calendar $year = (date('n', $time) < 7) ? date('Y', $time) : date('Y', $time) + 1; // start with crude lower-bound guesses for ranges $fall_start = mktime(0, 0, 0, 8, 15, $year-1); $iap_start = mktime(0, 0, 0, 1, 1, $year); $spring_start = mktime(0, 0, 0, 2, 1, $year); $summer_start = mktime(0, 0, 0, 6, 1, $year); $summer_end = mktime(0, 0, 0, 8, 15, $year); self::$terms = Array( 'fa' => new TimeRange($fall_start, $iap_start), 'ia' => new TimeRange($iap_start, $spring_start), 'sp' => new TimeRange($spring_start, $summer_start), 'su' => new TimeRange($summer_start, $summer_end), ); if (array_key_exists($year, self::$icals)) { $ical = self::$icals[$year]; $events = $ical->search_by_title("first day of"); foreach ($events as $event) { $event_start = increment_day($event->get_start(), -1); foreach (self::$terms as $term => $range) { if ($range->contains_point($event_start)) { self::$terms[$term]->set_start($event_start); switch ($term) { case 'ia': self::$terms['fa']->set_end($event_start); break; case 'sp': self::$terms['ia']->set_end($event_start); break; case 'su': self::$terms['sp']->set_end($event_start); break; } // switch break; } // if } // foreach term } // foreach event } // done creating terms } foreach (self::$terms as $term => $range) { if ($range->contains_point($time)) { return $term; break; } } return NULL; }