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; | |
| } | |
| } | |
| } |