Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      100.00%  | 
      1 / 1  | 
              | 
      100.00%  | 
      9 / 9  | 
      CRAP |         | 
      100.00%  | 
      27 / 27  | 
     
| TimeOffset |         | 
      100.00%  | 
      1 / 1  | 
              | 
      100.00%  | 
      9 / 9  | 
      11 |         | 
      100.00%  | 
      27 / 27  | 
     
| __construct |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      4 / 4  | 
     |||
| buildFromDateTimeInterface |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      2 / 2  | 
     |||
| getValue |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| isDst |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getAbbreviation |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| withValue |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      3 / 3  | 
     |||
| withDst |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      3 / 3  | 
     |||
| withAbbreviation |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      3 / 3  | 
     |||
| buildTimeZone |         | 
      100.00%  | 
      1 / 1  | 
      3 |         | 
      100.00%  | 
      9 / 9  | 
     |||
| <?php | |
| namespace Popy\Calendar\ValueObject; | |
| use DateTimeZone; | |
| use DateTimeInterface; | |
| /** | |
| * Represents the time offset induced by timezones and day saving time. | |
| * It is an immutable object. | |
| * | |
| * A TimeOffset MAY NOT be aware of its properties (value, dst status, | |
| * abbreviation, usually when it's been built by a parser). | |
| */ | |
| class TimeOffset | |
| { | |
| /** | |
| * Offset value. | |
| * | |
| * @var integer|null | |
| */ | |
| protected $value; | |
| /** | |
| * Day saving time status. | |
| * | |
| * @var boolean|null | |
| */ | |
| protected $dst; | |
| /** | |
| * Offset abbreviation. | |
| * | |
| * @var string|null | |
| */ | |
| protected $abbreviation; | |
| /** | |
| * Class constructor. | |
| * | |
| * @param integer|null $value Offset value. | |
| * @param boolean|null $dst Day saving time status. | |
| * @param string|null $abbreviation Offset abbreviation. | |
| */ | |
| public function __construct($value = null, $dst = null, $abbreviation = null) | |
| { | |
| $this->value = $value; | |
| $this->dst = $dst; | |
| $this->abbreviation = $abbreviation; | |
| } | |
| /** | |
| * Instanciates a TimeOffset from a DateTimeInterface, using the format | |
| * method to extract properties. | |
| * | |
| * @param DateTimeInterface $date | |
| * | |
| * @return static | |
| */ | |
| public static function buildFromDateTimeInterface(DateTimeInterface $date) | |
| { | |
| $parts = explode('|', $date->format('Z|I|T')); | |
| return new static((int)$parts[0], (bool)$parts[1], $parts[2]); | |
| } | |
| /** | |
| * Gets the offset value. | |
| * | |
| * @return integer|null | |
| */ | |
| public function getValue() | |
| { | |
| return $this->value; | |
| } | |
| /** | |
| * Checks day saving time status. | |
| * | |
| * @return boolean|null | |
| */ | |
| public function isDst() | |
| { | |
| return $this->dst; | |
| } | |
| /** | |
| * Gets the Offset abbreviation.. | |
| * | |
| * @return string|null | |
| */ | |
| public function getAbbreviation() | |
| { | |
| return $this->abbreviation; | |
| } | |
| /** | |
| * Gets a new TimeOffset instance with the input value. | |
| * | |
| * @param integer|null $value | |
| * | |
| * @return static | |
| */ | |
| public function withValue($value) | |
| { | |
| $res = clone $this; | |
| $res->value = $value; | |
| return $res; | |
| } | |
| /** | |
| * Gets a new TimeOffset instance with the input dst. | |
| * | |
| * @param boolean|null $dst | |
| * | |
| * @return static | |
| */ | |
| public function withDst($dst) | |
| { | |
| $res = clone $this; | |
| $res->dst = $dst; | |
| return $res; | |
| } | |
| /** | |
| * Gets a new TimeOffset instance with the input abbreviation. | |
| * | |
| * @param string|null $abbreviation | |
| * | |
| * @return static | |
| */ | |
| public function withAbbreviation($abbreviation) | |
| { | |
| $res = clone $this; | |
| $res->abbreviation = $abbreviation; | |
| return $res; | |
| } | |
| /** | |
| * Build a DateTimeZone object based on TimeOffset properties, if possible. | |
| * | |
| * @return DateTimeZone|null | |
| */ | |
| public function buildTimeZone() | |
| { | |
| if (null !== $this->value) { | |
| $sign = $this->value < 0 ? '-' : '+'; | |
| $value = intval(abs($this->value) / 60); | |
| return new DateTimeZone(sprintf( | |
| '%s%02d:%02d', | |
| $sign, | |
| intval($value / 60), | |
| $value % 60 | |
| )); | |
| } | |
| } | |
| } |