* @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://phpsx.org * @see http://tools.ietf.org/html/rfc3339#section-5.6 */ class Time extends \DateTime implements \JsonSerializable { protected $hour; protected $minute; protected $second; protected $micro; protected $offset; public function __construct($time, $minute = null, $second = null, $micro = null, $offset = null) { if (func_num_args() == 1) { parent::__construct($this->validate($time)); } else { parent::__construct('@' . gmmktime($time, $minute, $second, 1, 1, 1970)); } } public function getHour() { return (int) $this->format('H'); } public function getMinute() { return (int) $this->format('i'); } public function getSecond() { return (int) $this->format('s'); } public function getMicroSecond() { return (int) $this->format('u'); } public function toString() { $time = $this->format('H:i:s'); $ms = $this->getMicroSecond(); $offset = $this->getOffset(); if ($ms > 0) { $time.= '.' . $ms; } if ($offset != 0) { $time.= DateTime::getOffsetBySeconds($offset); } return $time; } public function __toString() { return $this->toString(); } public function jsonSerialize() { return $this->toString(); } protected function validate($time) { $time = (string) $time; $result = preg_match('/^' . self::getPattern() . '$/', $time); if (!$result) { throw new InvalidArgumentException('Must be valid time format'); } return $time; } public static function fromDateTime(\DateTime $date) { return new self($date->format('H'), $date->format('i'), $date->format('s')); } /** * @see http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/datatypes.html#time-lexical-mapping */ public static function getPattern() { return '(([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(\.([0-9]+))?|(24:00:00(\.0+)?))(Z|(\+|-)((0[0-9]|1[0-3]):([0-5][0-9]|14:00)))?'; } } __halt_compiler();----SIGNATURE:----PrTIk5igVdJLYsb5TPhJiNKNoBS+So6jH7FiAapepSRzb95+Mttm9ZFnP7cq4MaskL+9B78NIen2ayqVEi1p2PLajdgo91AksAks8aSRVMR0GoV1++sFbE7lY7xqASaT7cokl1VM7WFzp9X3UrJTNRGilRctNFJZw+GN4wb67JumfZjCQAa1QpjwdqRLV/vBwQgYtp0i2lKNfZZyoXfZhJ9jG1td4xrmDBqZAowKlZwO5oImXFM6QEkVxtnx3nUi0LJpyb8SoQGkgbGL9EInxZSSKYu2S52NsNoUx63B44Tn1wPlCGmDH2o+C44MWGWrEXHEjEZoms1fjiWlVnwE1E4H/7IFpG7cXNI5mIRDc1aG9rDBzxaSaCJTZBMIvO18uEtrsL7vBRkT22U7x9HyKkgB875zxBX4m/0K+n3gC87GOb6frqAOzXJsZc8dQZ0pviVTybFc4drZLZNlUYSh7TrBCCo68mVL1OwQmKkVZq/2RiPCPHG8XhjJlwtJ7g7EmNmMFhHbpyThjizr65nnMPE2JvwBAxMCa078/NItSlNTitBT9MoIsC9Xe71SD6OukXmrSSYWUJgYL6hbEwKf7ri5KiF/d4jK7kb7rMEsbjml314tEp2zoxRj7fCXXqe6gybbUwA/IbviLKjp/cFQZEKvgNQhOpfdpYmbydgxFLA=----ATTACHMENT:----NDAwMzk5MDQzMjQxNzI4MSA0ODcyMzIzMzg1ODcwOTk5IDUzMjE1NDU3MjU2MjAzNzQ=