* @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:----spC7G2iZQmyFsF2uFUEfPOaufsxHwMlVLMvU6W/m1yGMX2kTpTfuiCYaKG4hshTAddxBqg6T6IH5ia7wRX5mZcwEQBCT3qQLe2Bo0ITxHtLHEBdmzCfovHYizVC2SSWJ7qphrJTxxHyp9Mhj3v50gJOUj3JGCfKDwyUjv+wUcjm4y8LXXZYwYG7GmNNna7TGQOhbFhQ4RTZA8atIHdcHvssbfOvRgQxMBaTnZB3GegSGaWEXJwDTORgm97UwYykGVGX+2VZriGN3mUNMI4aVMsW3ABcl42647Iz32EoLgf1xJ2rRmabOP94pfGakmc6obQ7T1frSw7k/e5T3r8Qd2EPDD8feoMVodrf6OQ8hDgO0gnAqUgpjr8Ebni27oKtHZQYPQ9hCB4mbVfvI1bVFC1HUNMbbBu1GbKib9EmGonqap0bsJexla9EufF2vG0f39DTPZWN/gAfGg3auo9unvLu+Jg1IE7j7kY8ulyIg6HmBape34n1KjPbfAqPHACyzY88YLIYQRH9ZBwKkPWlKuY50GtkXdXEExplsSXAG2JUJCSDBlQE5riwF2t8bSN7NoSDuGFr+DchTU196/Yp9rYZOQg86kDXdZhhpGfP5mmEYLn0yMiapvsIfV3nS7QHYktCHfMaefCMdwUUxD3DHGqcF11jsYtJDAXTE07edyTQ=----ATTACHMENT:----NjI2ODM0MjU3MDA4OTA4MyA2NjQ1NDkyMzk3MzkxMTM3IDg0OTI5ODAyMjEzMzA5OTg=