21 $this->value = new \DateTime();
22 if ($date !==
null && $date !==
"")
26 $format = static::getFormat();
29 $parsedValue = $this->
parse($format, $date);
31 if ($parsedValue ===
false)
36 if (isset($parsedValue[
"timestamp"]))
38 $this->value->setTimestamp($parsedValue[
"timestamp"]);
42 $this->value->setDate($parsedValue[
'year'], $parsedValue[
'month'], $parsedValue[
'day']);
45 $this->value->setTime(0, 0);
55 $parsedValue = date_parse_from_format($format,
$time);
59 if ($parsedValue[
'error_count'] > 1)
61 $error = current($parsedValue[
'errors']);
63 if (
$error ===
'A two digit second could not be found')
66 $timestamp = strtotime(
$time);
68 if ($timestamp ===
false)
74 "timestamp" => $timestamp,
77 if (
$error !==
'Trailing data' &&
$error !==
'Data missing')
83 if (isset($parsedValue[
"relative"][
"second"]) && $parsedValue[
"relative"][
"second"] <> 0)
86 "timestamp" => $parsedValue[
"relative"][
"second"],
91 if ($parsedValue[
'month'] ===
false)
93 $parsedValue[
'month'] = 1;
95 if ($parsedValue[
'day'] ===
false)
97 $parsedValue[
'day'] = 1;
112 return $this->value->format($format);
145 public function add($interval)
147 $i = $this->tryToCreateIntervalByDesignators($interval);
150 $i = \DateInterval::createFromDateString($interval);
153 if (
$i instanceof \DateInterval)
155 $this->value->add(
$i);
171 $this->value->setDate(
$year, $month, $day);
176 private function tryToCreateIntervalByDesignators($interval)
178 if (!is_string($interval) || str_contains($interval,
' '))
186 $intervalTmp = strtoupper($interval);
188 $firstChar = substr($intervalTmp, 0, 1);
189 if ($firstChar ===
"-")
192 $intervalTmp = substr($intervalTmp, 1);
193 $firstChar = substr($intervalTmp, 0, 1);
196 if ($firstChar !==
"P")
198 $intervalTmp =
"P" . $intervalTmp;
200 $i = new \DateInterval($intervalTmp);
220 return $this->value->getTimestamp();
231 return $this->value->diff(
$time->value);
243 $format = static::getFormat(
$culture);
244 return $this->
format($format);
266 static $defaultCulture =
null;
270 if ($defaultCulture ===
null)
275 $defaultCulture =
$context->getCulture();
281 $format = static::getCultureFormat(
$culture);
283 return static::convertFormatToPhp($format);
332 $format = str_replace($from, $to, $format);
334 $tempFormat = $format;
335 $format = str_replace(
"HH",
"H", $format);
336 if ($tempFormat === $format)
338 $format = str_replace(
"H",
"h", $format);
341 $tempFormat = $format;
342 $format = str_replace(
"GG",
"G", $format);
343 if ($tempFormat === $format)
345 $format = str_replace(
"G",
"g", $format);
370 new static(
$time, $format);
390 $d->value = clone $datetime;
405 $d->value->setTimestamp($timestamp);
406 $d->value->setTime(0, 0);
static decode($text, $limit=0)
static createFromTimestamp($timestamp)
static getFormat(Context\Culture $culture=null)
setDate($year, $month, $day)
toString(Context\Culture $culture=null)
static getCultureFormat(Context\Culture $culture=null)
__construct($date=null, $format=null)
static convertFormatToPhp($format)
static createFromText($text)
static isCorrect($time, $format=null)
static createFromPhp(\DateTime $datetime)
setTime($hour, $minute, $second=0, $microseconds=0)