Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      66.67%  | 
      2 / 3  | 
      CRAP |         | 
      95.00%  | 
      19 / 20  | 
     
| StandardDateTime |         | 
      0.00%  | 
      0 / 1  | 
              | 
      66.67%  | 
      2 / 3  | 
      7 |         | 
      95.00%  | 
      19 / 20  | 
     
| map |         | 
      0.00%  | 
      0 / 1  | 
      3.00 |         | 
      93.75%  | 
      15 / 16  | 
     |||
| intIfNotNull |         | 
      100.00%  | 
      1 / 1  | 
      2 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| determineAmPm |         | 
      100.00%  | 
      1 / 1  | 
      2 |         | 
      100.00%  | 
      3 / 3  | 
     |||
| <?php | |
| namespace Popy\Calendar\Parser\ResultMapper; | |
| use Popy\Calendar\Parser\DateLexerResult; | |
| use Popy\Calendar\Parser\ResultMapperInterface; | |
| use Popy\Calendar\ValueObject\DateRepresentationInterface; | |
| use Popy\Calendar\ValueObject\DateTimeRepresentationInterface; | |
| /** | |
| * Maps standard format time symbols to DateTimeRepresentationInterface fields. | |
| */ | |
| class StandardDateTime implements ResultMapperInterface | |
| { | |
| /** | |
| * @inheritDoc | |
| */ | |
| public function map(DateLexerResult $parts, DateRepresentationInterface $date) | |
| { | |
| if (!$date instanceof DateTimeRepresentationInterface) { | |
| return; | |
| } | |
| // g 12-hour format of an hour without leading zeros 1 through 12 | |
| // h 12-hour format of an hour with leading zeros 01 through 12 | |
| // G 24-hour format of an hour without leading zeros 0 through 23 | |
| // H 24-hour format of an hour with leading zeros 00 through 23 | |
| // i Minutes with leading zeros 00 to 59 | |
| // s Seconds, with leading zeros 00 through 59 | |
| // v Milliseconds | |
| // μ Microseconds (the u microseconds is used for SI microseconds) | |
| $time = $date | |
| ->getTime() | |
| ->withFragments([ | |
| $this->intIfNotNull($parts->getFirst('g', 'G', 'h', 'H')), | |
| $this->intIfNotNull($parts->get('i')), | |
| $this->intIfNotNull($parts->get('s')), | |
| $this->intIfNotNull($parts->get('v')), | |
| $this->intIfNotNull($parts->get('μ')), | |
| ]) | |
| ->withHalved(0, $this->determineAmPm($parts)) | |
| ; | |
| // B Swatch Internet time 000 through 999 | |
| if (null !== $b = $parts->get('B')) { | |
| $time = $time->withTransversal(0, (int)$b); | |
| } | |
| return $date->withTime($time); | |
| } | |
| public function intIfNotNull($value) | |
| { | |
| return $value === null ? null : (int)$value; | |
| } | |
| protected function determineAmPm(DateLexerResult $parts) | |
| { | |
| // a Lowercase Ante meridiem and Post meridiem am or pm | |
| // A Uppercase Ante meridiem and Post meridiem AM or PM | |
| if (null !== $a = $parts->getFirst('a', 'A')) { | |
| return (bool)$a; | |
| } | |
| } | |
| } |