| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | <?phpnamespace Aws\Api;use Aws\Api\Parser\Exception\ParserException;use DateTime;use DateTimeZone;use Exception;/** * DateTime overrides that make DateTime work more seamlessly as a string, * with JSON documents, and with JMESPath. */class DateTimeResult extends \DateTime implements \JsonSerializable{    /**     * Create a new DateTimeResult from a unix timestamp.     * The Unix epoch (or Unix time or POSIX time or Unix     * timestamp) is the number of seconds that have elapsed since     * January 1, 1970 (midnight UTC/GMT).     *     * @return DateTimeResult     * @throws Exception     */    public static function fromEpoch($unixTimestamp)    {        if (!is_numeric($unixTimestamp)) {            throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromEpoch');        }        // PHP 5.5 does not support sub-second precision        if (\PHP_VERSION_ID < 56000) {            return new self(gmdate('c', $unixTimestamp));        }        $decimalSeparator = isset(localeconv()['decimal_point']) ? localeconv()['decimal_point'] : ".";        $formatString = "U" . $decimalSeparator . "u";        $dateTime = DateTime::createFromFormat(            $formatString,            sprintf('%0.6f', $unixTimestamp),            new DateTimeZone('UTC')        );        if (false === $dateTime) {            throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromEpoch');        }        return new self(            $dateTime->format('Y-m-d H:i:s.u'),            new DateTimeZone('UTC')        );    }    /**     * @return DateTimeResult     */    public static function fromISO8601($iso8601Timestamp)    {        if (is_numeric($iso8601Timestamp) || !is_string($iso8601Timestamp)) {            throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromISO8601');        }        return new DateTimeResult($iso8601Timestamp);    }    /**     * Create a new DateTimeResult from an unknown timestamp.     *     * @return DateTimeResult     * @throws Exception     */    public static function fromTimestamp($timestamp, $expectedFormat = null)    {        if (empty($timestamp)) {            return self::fromEpoch(0);        }        if (!(is_string($timestamp) || is_numeric($timestamp))) {            throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromTimestamp');        }        try {            if ($expectedFormat == 'iso8601') {                try {                    return self::fromISO8601($timestamp);                } catch (Exception $exception) {                    return self::fromEpoch($timestamp);                }            } else if ($expectedFormat == 'unixTimestamp') {                try {                    return self::fromEpoch($timestamp);                } catch (Exception $exception) {                    return self::fromISO8601($timestamp);                }            } else if (\Aws\is_valid_epoch($timestamp)) {                return self::fromEpoch($timestamp);            }            return self::fromISO8601($timestamp);        } catch (Exception $exception) {            throw new ParserException('Invalid timestamp value passed to DateTimeResult::fromTimestamp');        }    }    /**     * Serialize the DateTimeResult as an ISO 8601 date string.     *     * @return string     */    public function __toString()    {        return $this->format('c');    }    /**     * Serialize the date as an ISO 8601 date when serializing as JSON.     *     * @return string     */    #[\ReturnTypeWillChange]    public function jsonSerialize()    {        return (string) $this;    }}
 |