20 public function __construct($time =
null, $format =
null, \DateTimeZone $timezone =
null)
22 if ($timezone ===
null)
24 $this->value = new \DateTime();
28 $this->value = new \DateTime(
null, $timezone);
31 if ($time !==
null && $time !==
"")
35 $format = static::getFormat();
38 $parsedValue = $this->
parse($format, $time);
40 if($parsedValue ===
false)
45 if(isset($parsedValue[
"timestamp"]))
47 $this->value->setTimestamp($parsedValue[
"timestamp"]);
51 if(isset($parsedValue[
"zone_type"]) && $parsedValue[
"zone_type"] == 1)
53 if(isset($parsedValue[
"zone"]))
55 $this->
setTimeZone(
new \DateTimeZone(static::secondsToOffset($parsedValue[
"zone"])));
60 if($parsedValue[
'fraction'] > 0)
62 $microseconds = intval($parsedValue[
'fraction'] * 1000000);
65 $this->value->setDate($parsedValue[
'year'], $parsedValue[
'month'], $parsedValue[
'day']);
66 $this->value->setTime($parsedValue[
'hour'], $parsedValue[
'minute'], $parsedValue[
'second'], $microseconds);
73 $absSeconds = abs($seconds);
74 $hours = sprintf(
"%02d", floor($absSeconds / 3600));
75 $minutes = gmdate(
"i", $absSeconds % 3600);
76 return ($seconds < 0 ?
"-" :
"+") . $hours . $delimiter . $minutes;
88 if ($this->userTimeEnabled && \CTimeZone::Enabled())
90 $userTime = clone $this;
91 $userTime->toUserTime();
93 $format = static::getFormat($culture);
95 return $userTime->format($format);
98 return parent::toString($culture);
108 return $this->value->getTimezone();
120 $this->value->setTimezone($timezone);
131 $time = new \DateTime();
132 $this->setTimezone($time->getTimezone());
144 public function setTime($hour, $minute, $second = 0, $microseconds = 0)
146 $this->value->setTime($hour, $minute, $second, $microseconds);
164 $diff = \CTimeZone::GetOffset();
168 $this->
add(($diff < 0?
"-":
"").
"PT".abs($diff).
"S");
185 $time =
new static($timeString);
191 $time->setTime(0, 0);
194 if(\CTimeZone::Enabled())
199 $diff = \CTimeZone::GetOffset();
203 $time->add(($diff > 0?
"-":
"").
"PT".abs($diff).
"S");
220 return $culture->getDateTimeFormat();
222 return "DD.MM.YYYY HH:MI:SS";
235 $d->value = clone $datetime;
249 $d->value->setTimestamp($timestamp);
260 public static function tryParse($timeString, $format =
null)
262 if($timeString ===
'')
269 $time =
new static($timeString, $format);
291 $this->userTimeEnabled =
false;
301 $this->userTimeEnabled =
true;
static getFormat(Context\Culture $culture=null)
static createFromTimestamp($timestamp)
static tryParse($timeString, $format=null)
toString(Context\Culture $culture=null)
static secondsToOffset($seconds, $delimiter='')
static getCultureFormat(Context\Culture $culture=null)
__construct($time=null, $format=null, \DateTimeZone $timezone=null)
setTime($hour, $minute, $second=0, $microseconds=0)
static createFromUserTime($timeString)
setTimeZone(\DateTimeZone $timezone)
static createFromPhp(\DateTime $datetime)