function testIntersects() { $datetime1 = new A_Datetime(); $datetime1->parseDate('2001/01/01'); $datetime2 = new A_Datetime(); $datetime2->parseDate('2001/02/01'); $datetime3 = new A_Datetime(); $datetime3->parseDate('2001/03/01'); $datetime4 = new A_Datetime(); $datetime4->parseDate('2001/04/01'); $datetime5 = new A_Datetime(); $datetime5->parseDate('2001/05/01'); // not overlapping $range1 = new A_Datetime_Range($datetime1, $datetime2); $range2 = new A_Datetime_Range($datetime3, $datetime4); $this->assertFalse($range1->intersects($range2)); // range1 end date in range2 $range1 = new A_Datetime_Range($datetime1, $datetime3); $range2 = new A_Datetime_Range($datetime2, $datetime4); $this->assertTrue($range1->intersects($range2)); // range1 start date in range2 $range1 = new A_Datetime_Range($datetime3, $datetime5); $range2 = new A_Datetime_Range($datetime1, $datetime4); $this->assertTrue($range1->intersects($range2)); // range1 the same as range2 $range1 = new A_Datetime_Range($datetime2, $datetime4); $range2 = new A_Datetime_Range($datetime2, $datetime4); $this->assertTrue($range1->intersects($range2)); // range1 end date the same as range2 start date $range1 = new A_Datetime_Range($datetime1, $datetime3); $range2 = new A_Datetime_Range($datetime3, $datetime5); $this->assertTrue($range1->intersects($range2)); // range1 start date the same as range2 end date $range1 = new A_Datetime_Range($datetime3, $datetime5); $range2 = new A_Datetime_Range($datetime1, $datetime3); $this->assertTrue($range1->intersects($range2)); // range1 inside range2 $range1 = new A_Datetime_Range($datetime2, $datetime4); $range2 = new A_Datetime_Range($datetime1, $datetime5); $this->assertTrue($range1->intersects($range2)); // range2 inside range1 $range1 = new A_Datetime_Range($datetime1, $datetime5); $range2 = new A_Datetime_Range($datetime2, $datetime4); $this->assertTrue($range1->intersects($range2)); }
/** * Checks whether or not the given DateTime object is within this range * * @param A_Datetime $datetime DateTime object to check * @param bool $inclusive Set to true to include start and end in range * @return bool */ public function contains($datetime, $inclusive = false) { if ($datetime instanceof A_Datetime) { if ($inclusive) { return $datetime->getTimestamp() >= $this->start->getTimestamp() && $datetime->getTimestamp() <= $this->end->getTimestamp(); } else { return $datetime->getTimestamp() > $this->start->getTimestamp() && $datetime->getTimestamp() < $this->end->getTimestamp(); } } }
function testArrayToString() { $array1 = array('year' => '2008', 'mon' => '12', 'mday' => '20', 'hours' => '21', 'minutes' => '11', 'seconds' => '10'); $array2 = array('year' => '2008', 'month' => '12', 'day' => '20', 'hour' => '21', 'minute' => '11', 'second' => '10'); $array3 = array('year' => '2009', 'month' => '11', 'day' => '10', 'hour' => '01', 'minute' => '21', 'second' => '11'); $datetime = new A_Datetime($array2); $str = $datetime->getDate(true); $this->assertEqual($str, '2008-12-20 21:11:10'); $str = $datetime->arrayToString($array1); $this->assertEqual($str, '2008-12-20 21:11:10'); $str = $datetime->arrayToString($array2); $this->assertEqual($str, '2008-12-20 21:11:10'); }