/** * Parse the input string and set our elements based on the contents of the * input string. Elements not found in the string will be null. * * @return void * @access private * @since 5/24/05 */ function parse() { preg_match(self::getRegex(), $this->input, $timeMatches); $timeComponent = $timeMatches[0]; // The date is anything before the time $dateComponent = trim(str_replace($timeComponent, '', $this->input)); $timeParser = new ISO8601TimeStringParser($timeComponent); $dateParser = StringParser::getParserFor($dateComponent); // Merge the two results into our fields if ($dateParser) { $this->setYear($dateParser->year()); $this->setMonth($dateParser->month()); $this->setDay($dateParser->day()); } $this->setHour($timeParser->hour()); $this->setMinute($timeParser->minute()); $this->setSecond($timeParser->second()); if (!is_null($timeParser->offsetHour())) { $this->setOffsetHour($timeParser->offsetHour()); } if (!is_null($timeParser->offsetMinute())) { $this->setOffsetMinute($timeParser->offsetMinute()); } if (!is_null($timeParser->offsetSecond())) { $this->setOffsetSecond($timeParser->offsetSecond()); } }
/** * Test the creation methods. */ function test_full_format() { $parser = new ISO8601StringParser('2005-05-23T15:25:10-04:00'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2005); $this->assertEqual($parser->month(), 5); $this->assertEqual($parser->day(), 23); $this->assertEqual($parser->hour(), 15); $this->assertEqual($parser->minute(), 25); $this->assertEqual($parser->second(), 10); $this->assertEqual($parser->offsetHour(), -4); $this->assertEqual($parser->offsetMinute(), 0); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601StringParser('2005-05-03 15:25:10-04:30'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2005); $this->assertEqual($parser->month(), 5); $this->assertEqual($parser->day(), 3); $this->assertEqual($parser->hour(), 15); $this->assertEqual($parser->minute(), 25); $this->assertEqual($parser->second(), 10); $this->assertEqual($parser->offsetHour(), -4); $this->assertEqual($parser->offsetMinute(), -30); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601StringParser('20050523152510-0400'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2005); $this->assertEqual($parser->month(), 5); $this->assertEqual($parser->day(), 23); $this->assertEqual($parser->hour(), 15); $this->assertEqual($parser->minute(), 25); $this->assertEqual($parser->second(), 10); $this->assertEqual($parser->offsetHour(), -4); $this->assertEqual($parser->offsetMinute(), 0); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601StringParser('20050523152510'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2005); $this->assertEqual($parser->month(), 5); $this->assertEqual($parser->day(), 23); $this->assertEqual($parser->hour(), 15); $this->assertEqual($parser->minute(), 25); $this->assertEqual($parser->second(), 10); $this->assertEqual($parser->offsetHour(), NULL); $this->assertEqual($parser->offsetMinute(), NULL); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601StringParser('2005-05-03 15:25:10Z'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2005); $this->assertEqual($parser->month(), 5); $this->assertEqual($parser->day(), 3); $this->assertEqual($parser->hour(), 15); $this->assertEqual($parser->minute(), 25); $this->assertEqual($parser->second(), 10); $this->assertEqual($parser->offsetHour(), 0); $this->assertEqual($parser->offsetMinute(), 0); $this->assertEqual($parser->offsetSecond(), 0); $parser = new ISO8601StringParser('2006-11-12 18:00:00'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2006); $this->assertEqual($parser->month(), 11); $this->assertEqual($parser->day(), 12); $this->assertEqual($parser->hour(), 18); $this->assertEqual($parser->minute(), 0); $this->assertEqual($parser->second(), 0); $this->assertEqual($parser->offsetHour(), 0); $this->assertEqual($parser->offsetMinute(), 0); $this->assertEqual($parser->offsetSecond(), 0); $parser = new ISO8601StringParser('2005-05-03'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2005); $this->assertEqual($parser->month(), 5); $this->assertEqual($parser->day(), 3); $this->assertEqual($parser->hour(), NULL); $this->assertEqual($parser->minute(), NULL); $this->assertEqual($parser->second(), NULL); $this->assertEqual($parser->offsetHour(), NULL); $this->assertEqual($parser->offsetMinute(), NULL); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601StringParser('20050503'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2005); $this->assertEqual($parser->month(), 5); $this->assertEqual($parser->day(), 3); $this->assertEqual($parser->hour(), NULL); $this->assertEqual($parser->minute(), NULL); $this->assertEqual($parser->second(), NULL); $this->assertEqual($parser->offsetHour(), NULL); $this->assertEqual($parser->offsetMinute(), NULL); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601StringParser('2005-05'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2005); $this->assertEqual($parser->month(), 5); $this->assertEqual($parser->day(), NULL); $this->assertEqual($parser->hour(), NULL); $this->assertEqual($parser->minute(), NULL); $this->assertEqual($parser->second(), NULL); $this->assertEqual($parser->offsetHour(), NULL); $this->assertEqual($parser->offsetMinute(), NULL); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601StringParser('200505'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2005); $this->assertEqual($parser->month(), 5); $this->assertEqual($parser->day(), NULL); $this->assertEqual($parser->hour(), NULL); $this->assertEqual($parser->minute(), NULL); $this->assertEqual($parser->second(), NULL); $this->assertEqual($parser->offsetHour(), NULL); $this->assertEqual($parser->offsetMinute(), NULL); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601StringParser('2005'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), 2005); $this->assertEqual($parser->month(), NULL); $this->assertEqual($parser->day(), NULL); $this->assertEqual($parser->hour(), NULL); $this->assertEqual($parser->minute(), NULL); $this->assertEqual($parser->second(), NULL); $this->assertEqual($parser->offsetHour(), NULL); $this->assertEqual($parser->offsetMinute(), NULL); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601TimeStringParser('15:25:10Z'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), NULL); $this->assertEqual($parser->month(), NULL); $this->assertEqual($parser->day(), NULL); $this->assertEqual($parser->hour(), 15); $this->assertEqual($parser->minute(), 25); $this->assertEqual($parser->second(), 10); $this->assertEqual($parser->offsetHour(), 0); $this->assertEqual($parser->offsetMinute(), 0); $this->assertEqual($parser->offsetSecond(), 0); $parser = new ISO8601TimeStringParser('15:25:10'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), NULL); $this->assertEqual($parser->month(), NULL); $this->assertEqual($parser->day(), NULL); $this->assertEqual($parser->hour(), 15); $this->assertEqual($parser->minute(), 25); $this->assertEqual($parser->second(), 10); $this->assertEqual($parser->offsetHour(), NULL); $this->assertEqual($parser->offsetMinute(), NULL); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601TimeStringParser('T152510'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), NULL); $this->assertEqual($parser->month(), NULL); $this->assertEqual($parser->day(), NULL); $this->assertEqual($parser->hour(), 15); $this->assertEqual($parser->minute(), 25); $this->assertEqual($parser->second(), 10); $this->assertEqual($parser->offsetHour(), NULL); $this->assertEqual($parser->offsetMinute(), NULL); $this->assertEqual($parser->offsetSecond(), NULL); $parser = new ISO8601TimeStringParser('T152510.375'); $this->assertTrue($parser->canHandle()); $this->assertEqual($parser->year(), NULL); $this->assertEqual($parser->month(), NULL); $this->assertEqual($parser->day(), NULL); $this->assertEqual($parser->hour(), 15); $this->assertEqual($parser->minute(), 25); $this->assertEqual($parser->second(), 10.375); $this->assertEqual($parser->offsetHour(), NULL); $this->assertEqual($parser->offsetMinute(), NULL); $this->assertEqual($parser->offsetSecond(), NULL); }