Overview

Namespaces

  • Apptus
    • ESales
      • Connector
        • Report
        • Time
    • Util
      • Cache
  • PHP
  • Overview
  • Namespace
  • Class
  • Tree
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 
<?php
namespace Apptus\ESales\Connector\Time;

/**
 * A date and time on the ISO 8601 format.
 */
class IsoDateTime {
    /**
     * Parses a date and time specification and returns a date-time object.
     *
     * @param string
     *            The input string. May not be null.
     * @throws \InvalidArgumentException if the date and time cannot be parsed.
     * @return IsoDateTime
     *            An IsoDateTime object.
     */
    public static function parse($input) {
        if ($input === null) {
            throw new \InvalidArgumentException('Input may not be null.');
        } elseif (!is_string($input)) {
            throw new \InvalidArgumentException('Input must be string.');
        }

        $ix = strpos($input, 'T');

        if ($ix !== strrpos($input, 'T')) {
            throw new \InvalidArgumentException();
        }

        $date = null;
        $time = null;

        if ($ix === false) {
            $date = IsoDate::parse($input);
        } else {
            $date = IsoDate::parse(substr($input, 0, $ix));
            if (!$date->hasDayPrecision()) {
                throw new \InvalidArgumentException();
            }

            $time = Time::parse(substr($input, $ix + 1));
        }

        return new IsoDateTime($date, $time);
    }

    /**
     * Parses a date and time specification and returns a date-time object.
     *
     * The date may omit the larger units, which in such case will be
     * inherited from the start date-time supplied. Note that the start date
     * then must be defined in the same date format as the input string.
     *
     * @param string
     *          The input string. May not be null.
     * @param IsoDateTime
     *          An IsoDateTime object to inherit from.
     * @return IsoDateTime An IsoDateTime object.
     * @throws \InvalidArgumentException if the date and time cannot be parsed.
     */

    public static function parseInContext($input, IsoDateTime $start) {
        if ($input === null) {
            throw new \InvalidArgumentException('Input may not be null.');
        } elseif (!is_string($input)) {
            throw new \InvalidArgumentException('Input must be string.');
        }

        $ix = strpos($input, 'T');

        if ($ix !== strrpos($input, 'T')) {
            throw new \InvalidArgumentException();
        }

        if ($ix === false) {
            if ($start->time() !== null) {
                throw new \InvalidArgumentException();
            }

            $date = IsoDate::parseInContext($input, $start->date());
            return new IsoDateTime($date, null);
        }

        $date = IsoDate::parseInContext(substr($input, 0, $ix), $start->date());
        $time = Time::parseInContext(substr($input, $ix + 1), $start->time());
        return new IsoDateTime($date, $time);
    }

    private $date;
    private $time;

    /**
     * Creates a date-object with the specified date and time.
     *
     * @param IsoDate
     *          The date. May not be null.
     * @param Time
     *          The time. May be null.
     */
    public function __construct(IsoDate $date, Time $time = null) {
        $this->date = $date;
        $this->time = $time;
    }

    /**
     * Returns the date. Never returns null.
     *
     * @return IsoDate
     */
    public function date() {
        return $this->date;
    }

    /**
     * Returns the time. Returns null if omitted at creation.
     *
     * @return Time|null
     */
    public function time() {
        return $this->time;
    }

    /**
     * Returns a point in time represented by this date-time object.
     *
     * If the date or time lacks precision, or if the time is omitted,
     * then the smallest valid point in time is used.
     *
     * @param \DateTimeZone The timezone.
     * @return TimePoint A point in time.
     */
    public function toTimePoint(\DateTimeZone $tz) {
        return $this->date->toTimePoint($this->time, $tz);
    }

    /**
     * Returns this date and time in ISO 8601 format: &lt;date&gt;T&lt;time&gt;.
     *
     * @return string
     */
    public function __toString() {
        $result = (string) $this->date;
        if ($this->time !== null) {
            $result .= 'T' . $this->time;
        }
        return $result;
    }

    /**
     * @param mixed $o
     * @return boolean
     */
    public function equals($o) {
        if ($this === $o) return true;
        if ($o === null || gettype($this) !== gettype($o)) return false;

        $that = $o;

        if ($this->date !== null ? !$this->date->equals($that->date()) : $that->date() !== null) return false;
        if ($this->time !== null ? !$this->time->equals($that->time()) : $that->time() !== null) return false;

        return true;
    }
}
Apptus ESales Connector PHP API documentation generated by ApiGen