<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.datetimeimmutable.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'datetimeimmutable.createfromformat.php',
    1 => 'DateTimeImmutable::createFromFormat',
    2 => 'Разбирает строку времени по заданному формату',
  ),
  'up' => 
  array (
    0 => 'class.datetimeimmutable.php',
    1 => 'DateTimeImmutable',
  ),
  'prev' => 
  array (
    0 => 'datetimeimmutable.construct.php',
    1 => 'DateTimeImmutable::__construct',
  ),
  'next' => 
  array (
    0 => 'datetimeimmutable.createfrominterface.php',
    1 => 'DateTimeImmutable::createFromInterface',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/datetime/datetimeimmutable/createfromformat.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="datetimeimmutable.createfromformat" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">DateTimeImmutable::createFromFormat</h1>
  <h1 class="refname">date_create_immutable_from_format</h1>
  <p class="verinfo">(PHP 5 &gt;= 5.5.0, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">DateTimeImmutable::createFromFormat</span> -- <span class="refname">date_create_immutable_from_format</span> &mdash; <span class="dc-title">Разбирает строку времени по заданному формату</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-datetimeimmutable.createfromformat-description">
  <h3 class="title">Описание</h3>
  <p class="para">Объектно-ориентированный стиль</p>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="modifier">static</span> <span class="methodname"><strong>DateTimeImmutable::createFromFormat</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$format</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$datetime</code></span>, <span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="class.datetimezone.php" class="type DateTimeZone">DateTimeZone</a></span></span> <code class="parameter">$timezone</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>): <span class="type"><span class="type"><a href="class.datetimeimmutable.php" class="type DateTimeImmutable">DateTimeImmutable</a></span>|<span class="type"><a href="language.types.singleton.php" class="type false">false</a></span></span></div>

  <p class="para rdfs-comment">Процедурный стиль</p>
  <div class="methodsynopsis dc-description"><span class="methodname"><a href="function.date-create-immutable-from-format.php" class="methodname">date_create_immutable_from_format</a></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$format</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$datetime</code></span>, <span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="class.datetimezone.php" class="type DateTimeZone">DateTimeZone</a></span></span> <code class="parameter">$timezone</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>): <span class="type"><span class="type"><a href="class.datetimeimmutable.php" class="type DateTimeImmutable">DateTimeImmutable</a></span>|<span class="type"><a href="language.types.singleton.php" class="type false">false</a></span></span></div>

  <p class="para rdfs-comment">
   Метод возвращает новый объект DateTimeImmutable,
   который представляет строку даты и времени <code class="parameter">datetime</code>
   в формате <code class="parameter">format</code>.
  </p>
 </div>


 <div class="refsect1 parameters" id="datetimeimmutable.createfromformat.parameters">
  <h3 class="title">Список параметров</h3>
  <dl>
   
    <dt><code class="parameter">format</code></dt>
    <dd>
     <p class="para">
      Формат даты и времени в виде строки (<span class="type"><a href="language.types.string.php" class="type string">string</a></span>), которому
      соответствует значение второго аргумента функции. Список параметров
      форматирования приводят следующие параграфы. В большей части случаев
      работают те же символы, что и для функции <span class="function"><a href="function.date.php" class="function">date()</a></span>.
     </p>
     <p class="para">
      Метод инициализирует каждое поле текущей датой и временем системы. Поля часто приходится «обнулять»
      до значений начала эпохи Unix — <code class="literal">1970-01-01 00:00:00 UTC</code>.
      Поля, которые не указали в строке формата <code class="parameter">format</code>,
      сбрасывают до начальных значений Unix-эпохи путём включения в начало строки формата
      символа <code class="literal">!</code> или в конец строки формата символа <code class="literal">|</code>.
      Подробнее о работе символов рассказывает документация к каждому параметру в таблице ниже.
     </p>
     <p class="para">
      Метод анализирует формат слева направо, поэтому в отдельных случаях порядок
      расположения символов формата влияет на результат. Методу вначале требуется
      проанализировать год, например, через символы <code class="literal">Y</code> или <code class="literal">y</code>,
      если строка формата содержит символ <code class="literal">z</code>, для которого метод ищет день года.
     </p>
     <p class="para">
      Символы для разбора чисел допускают широкий диапазон значений,
      который выходит за пределы логического диапазона. Например,
      символ <code class="literal">d</code>, для которого метод ищет в строке разбора день месяца,
      принимает значения в диапазоне от <code class="literal">00</code> до <code class="literal">99</code>.
      Единственное ограничение — количество цифр.
      При установке значения за пределами диапазона
      срабатывает механизм переполнения анализатора даты и времени.
      Примеры показывают поведение при переполнении.
     </p>
     <p class="para">
      Метод разбирает данные для буквы формата в жадном режиме —
      считывает предельное для формата количество цифр,
      поэтому в строке <code class="parameter">datetime</code> иногда не остаётся символов
      для следующих букв формата, и результат становится непредсказуемым. Пример на этой странице также иллюстрирует эту проблему.
     </p>
     <p class="para">
      <table class="doctable table">
       <caption><strong>
        Список символов, которые распознаёт строка формата <code class="parameter">format</code>
       </strong></caption>
       
        <thead>
         <tr>
          <th>Символ в строке <code class="parameter">format</code></th>
          <th>Описание</th>
          <th>Пример доступных для разбора значений</th>
         </tr>

        </thead>

        <tbody class="tbody">
         <tr>
          <td style="text-align: center;"><em>День</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal">d</code> и <code class="literal">j</code></td>
          <td>
           День месяца, 2 цифры с ведущим нулём или без него
          </td>
          <td>
           От <code class="literal">01</code> до <code class="literal">31</code>
           или от <code class="literal">1</code> до <code class="literal">31</code>.
           Параметр принимает двузначные числа, которые превышают количество дней в месяце,
           тогда месяц переполняется и разница переносится на следующий месяц.
           Например, число 33 с январём означает 2 февраля
          </td>
         </tr>

         <tr>
          <td><code class="literal">D</code> и <code class="literal">l</code></td>
          <td>
           Текстовое представление дня недели
          </td>
          <td>
           От <code class="literal">Mon</code> до <code class="literal">Sun</code>
           или от <code class="literal">Sunday</code> до <code class="literal">Saturday</code>.
           Дата переполняется до <em>следующей</em> даты с заданным названием дня недели,
           если заданное название дня недели отличается от названия дня,
           который принадлежит разобранной дате (или дате по умолчанию).
           Примеры ниже содержат объяснение
          </td>
         </tr>

         <tr>
          <td><code class="literal">S</code></td>
          <td>
           Английское наращение — суффикс для порядкового числительного, которое означает день месяца, 2 буквы.
           Метод пропустит эти буквы при разборе строки
          </td>
          <td>
           <code class="literal">st</code>, <code class="literal">nd</code>, <code class="literal">rd</code>
           или <code class="literal">th</code>
          </td>
         </tr>

         <tr>
          <td><code class="literal">z</code></td>
          <td>
           День года начиная с 0;
           перед параметром требуется указать параметр <code class="literal">Y</code> или <code class="literal">y</code>
          </td>
          <td>
           От <code class="literal">0</code> до <code class="literal">365</code>.
           Параметр принимает трёхзначные числа, которые превышают количество дней в году,
           тогда год переполняется и разница переносится на следующий год.
           Например, число 366 с 2022 годом означает 2 января 2023 года
          </td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Месяц</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal">F</code> и <code class="literal">M</code></td>
          <td>
           Текстовое представление названия месяца, например January или Sept
          </td>
          <td>
           С <code class="literal">January</code> по <code class="literal">December</code>
           или с <code class="literal">Jan</code> по <code class="literal">Dec</code>
          </td>
         </tr>

         <tr>
          <td><code class="literal">m</code> и <code class="literal">n</code></td>
          <td>
           Числовое представление номера месяца в году с ведущим нулём или без него
          </td>
          <td>
           От <code class="literal">01</code> до <code class="literal">12</code>
           или от <code class="literal">1</code> до <code class="literal">12</code>.
           Параметр принимает двузначные числа больше 12, тогда год переполняется
           и разница переносится на следующий год.
           Например, число 13 означает январь следующего года
          </td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Год</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal">X</code> и <code class="literal">x</code></td>
          <td>
           Полное числовое представление года длиной <em>до</em> 19 цифр
           с необязательным префиксом <code class="literal">+</code> или <code class="literal">-</code>
          </td>
          <td>
           Примеры: <code class="literal">0055</code>, <code class="literal">787</code>,
           <code class="literal">1999</code>, <code class="literal">-2003</code>,
           <code class="literal">+10191</code>
          </td>
         </tr>

         <tr>
          <td><code class="literal">Y</code></td>
          <td>
           Полное числовое представление года длиной <em>до</em> 4 цифр
          </td>
          <td>
           Примеры: <code class="literal">25</code> (аналогично <code class="literal">0025</code>),
           <code class="literal">787</code>, <code class="literal">1999</code>, <code class="literal">2003</code>
          </td>
         </tr>

         <tr>
          <td><code class="literal">y</code></td>
          <td>
           Двузначное представление года в диапазоне 1970-2069 включительно
          </td>
          <td>
           Примеры:
           <code class="literal">99</code> или <code class="literal">03</code>,
           которые метод интерпретирует как <code class="literal">1999</code>
           и <code class="literal">2003</code>
          </td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Время</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal">a</code> и <code class="literal">A</code></td>
          <td>
           Ante meridiem (лат. «до полудня») или Post meridiem (лат. «после полудня»)
          </td>
          <td>
           Регистронезависимые обозначения <code class="literal">am</code> или <code class="literal">pm</code>
          </td>
         </tr>

         <tr>
          <td><code class="literal">g</code> и <code class="literal">h</code></td>
          <td>
           12-часовой формат часа с ведущим нулём или без него
          </td>
          <td>
           От <code class="literal">1</code> до <code class="literal">12</code>
           или от <code class="literal">01</code> до <code class="literal">12</code>.
           Параметр принимает двузначные числа больше 12, тогда день переполняется
           и разница переносится на следующий день.
           Например, число <code class="literal">14</code> означает <code class="literal">02</code> часа
           следующего AM- или PM-периода
          </td>
         </tr>

         <tr>
          <td><code class="literal">G</code> и <code class="literal">H</code></td>
          <td>
           24-часовой формат часа с ведущим нулём или без него
          </td>
          <td>
           От <code class="literal">0</code> до <code class="literal">23</code>
           или от <code class="literal">00</code> до <code class="literal">23</code>.
           Параметр принимает двузначные числа больше 24, тогда день переполняется
           и разница переносится на следующий день.
           Например, число <code class="literal">26</code> означает <code class="literal">02:00</code> следующего дня
          </td>
         </tr>

         <tr>
          <td><code class="literal">i</code></td>
          <td>
           Минуты с ведущим нулём
          </td>
          <td>
           От <code class="literal">00</code> до <code class="literal">59</code>.
           Параметр принимает двузначные числа больше 59, тогда час переполняется
           и разница переносится на следующий час.
           Например, число <code class="literal">66</code> означает <code class="literal">:06</code> минут следующего часа
          </td>
         </tr>

         <tr>
          <td><code class="literal">s</code></td>
          <td>Секунды с ведущим нулём</td>
          <td>
           От <code class="literal">00</code> до <code class="literal">59</code>.
           Параметр принимает двузначные числа больше 59, тогда час переполняется
           и разница переносится на следующую минуту.
           Например, число <code class="literal">90</code> означает <code class="literal">:30</code> секунд следующей минуты
          </td>
         </tr>

         <tr>
          <td><code class="literal">v</code></td>
          <td>Миллисекунды длиной до 3 цифр</td>
          <td>
           Примеры: <code class="literal">12</code> (<code class="literal">0.12</code> секунды),
           <code class="literal">345</code> (<code class="literal">0.345</code> секунды)
          </td>
         </tr>

         <tr>
          <td><code class="literal">u</code></td>
          <td>Микросекунды длиной до 6 цифр</td>
          <td>
           Примеры: <code class="literal">45</code> (<code class="literal">0.45</code> секунды),
           <code class="literal">654321</code> (<code class="literal">0.654321</code> секунды)
          </td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Часовой пояс</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td>
           <code class="literal">e</code>, <code class="literal">O</code>, <code class="literal">p</code>,
           <code class="literal">P</code> и <code class="literal">T</code>
          </td>
          <td>
           Идентификатор часового пояса, разница в часах относительно
           UTC, разница относительно UTC с двоеточием между часами и минутами
           или аббревиатура часового пояса
          </td>
          <td>
           Примеры: <code class="literal">UTC</code>; <code class="literal">GMT</code>;
           <code class="literal">Atlantic/Azores</code>, <code class="literal">+0200</code>,
           <code class="literal">+02:00</code> или <code class="literal">EST</code>; <code class="literal">MDT</code>
          </td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Полные дата и время</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal">U</code></td>
          <td>
           Количество секунд с начала эпохи Unix — January 1 1970 00:00:00 GMT
          </td>
          <td>Пример: <code class="literal">1292177455</code></td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Пробел и разделители</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal"> </code> (пробел)</td>
          <td>
           Ноль или более символов пробела, табуляции, неразрывного пробела NBSP (U+A0)
           или узкого неразрывного пробела NNBSP (U+202F)
          </td>
          <td>Пример: <code class="literal">&quot;\t&quot;</code>, <code class="literal">&quot;  &quot;</code></td>
         </tr>

         <tr>
          <td><code class="literal">#</code></td>
          <td>
           Один из следующих символов разделения: <code class="literal">;</code>,
           <code class="literal">:</code>, <code class="literal">/</code>, <code class="literal">.</code>,
           <code class="literal">,</code>, <code class="literal">-</code>, <code class="literal">(</code>
           или <code class="literal">)</code>
          </td>
          <td>Пример: <code class="literal">/</code></td>
         </tr>

         <tr>
          <td>
           <code class="literal">;</code>,
           <code class="literal">:</code>, <code class="literal">/</code>, <code class="literal">.</code>,
           <code class="literal">,</code>, <code class="literal">-</code>, <code class="literal">(</code>
           или <code class="literal">)</code>
          </td>
          <td>Заданный символ</td>
          <td>Пример: <code class="literal">-</code></td>
         </tr>

         <tr>
          <td><code class="literal">?</code></td>
          <td>Случайный байт</td>
          <td>
           Пример: <code class="literal">^</code>. Предостережение: для символов в кодировке UTF-8
           иногда требуется указать больше одного символа <code class="literal">?</code>,
           поскольку в Юникоде отдельные символы кодируются больше чем одним байтом.
           Разобрать многобайтовые символы помогает модификатор <code class="literal">*</code>
          </td>
         </tr>

         <tr>
          <td><code class="literal">*</code></td>
          <td>
           Случайные байты до следующего разделителя или цифры
          </td>
          <td>
           Пример: символ <code class="literal">*</code> в строке формата <code class="literal">Y-*-d</code>
           для строки разбора <code class="literal">2009-aWord-08</code> будет соответствовать
           части <code class="literal">aWord</code>
          </td>
         </tr>

         <tr>
          <td><code class="literal">!</code></td>
          <td>
           Сбрасывает поля «год», «месяц», «день», «час», «минута»,
           «секунда», «милли-» или «микросекунда» и «часовой пояс»
           до начальных значений Unix-эпохи: <code class="literal">0</code> для часа, минуты и секунды,
           <code class="literal">1</code> для месяца и дня, <code class="literal">1970</code> для года
           и часового пояса по умолчанию
          </td>
          <td>
           Без символа <code class="literal">!</code> метод установит полям
           текущие дату и время системы
          </td>
         </tr>

         <tr>
          <td><code class="literal">|</code></td>
          <td>
           Сбрасывает значения полей «год», «месяц», «день», «час», «минута»,
           «секунда», «милли-» или «микросекунда» и «часовой пояс», которые метод ещё не разобрал,
           до начальных значений Unix-эпохи
          </td>
          <td>
           Формат <code class="literal">Y-m-d|</code> установит год, месяц и день на основе информации,
           которую нашёл в строке для разбора, а для часа, минуты и секунды установит значение 0
          </td>
         </tr>

         <tr>
          <td><code class="literal">+</code></td>
          <td>
           С этим спецификатором формата лишние данные в конце строки разбора,
           добавят в структуру, которую создаёт метод, не ошибку, а предупреждение
          </td>
          <td>
           Содержала ли строка разбора в конце лишние данные,
           покажет метод <span class="methodname"><a href="datetime.getlasterrors.php" class="methodname">DateTime::getLastErrors()</a></span>
          </td>
         </tr>

        </tbody>
       
      </table>

     </p>
     <p class="para">
      Символы в строке формата, которые метод не распознал, вызовут сбой разбора,
      и метод добавит в структуру с предупреждениями и ошибками, которую он создаёт,
      сообщение об ошибке. Сообщения об ошибке запрашивают методом
      <span class="methodname"><a href="datetime.getlasterrors.php" class="methodname">DateTime::getLastErrors()</a></span>.
     </p>
     <p class="para">
      При включении в строку формата <code class="parameter">format</code> буквальных символов,
      символы экранируют обратным слешем: <code class="literal">\</code>.
     </p>
     <p class="para">
      Метод сгенерирует дату и время на основе информации в строке разбора,
      а частям даты и времени, которые не указали в строке формата <code class="parameter">format</code>,
      установит текущее время системы, если строка формата <code class="parameter">format</code>
      не содержит символ <code class="literal">!</code>.
     </p>
     <p class="para">
      Метод сгенерирует дату и время на основе информации в строке разбора,
      а частям даты и времени, которые не указали в строке формата <code class="parameter">format</code>,
      и значениям слева от символа <code class="literal">!</code> установит значения даты и времени начала Unix-эпохи,
      если строка формата <code class="parameter">format</code> содержит символ <code class="literal">!</code>.
     </p>
     <p class="para">
      Метод установит нулевые значения остальным полям времени,
      которые не указали в строке формата, если разобрал хотя бы один символ для поля времени.
     </p>
     <p class="para">
      Начало эпохи Unix — 1970-01-01 00:00:00 UTC.
     </p>
    </dd>
   
   
    <dt><code class="parameter">datetime</code></dt>
    <dd>
     <p class="para">
      Строка, которая представляет время.
     </p>
    </dd>
   
   
    <dt><code class="parameter">timezone</code></dt>
    <dd>
     <p class="para">
      Объект класса <span class="classname"><a href="class.datetimezone.php" class="classname">DateTimeZone</a></span>, который представляет
      часовой пояс.
     </p>
     <p class="para">
      Метод установит текущий часовой пояс, если часовой пояс
      <code class="parameter">timezone</code> опустили или установили для параметра значение <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>,
      а дата и время <code class="parameter">datetime</code> не содержит часового пояса.
     </p>
     <blockquote class="note"><p><strong class="note">Замечание</strong>: 
      <p class="para">
       Метод проигнорирует параметр <code class="parameter">timezone</code>
       и текущий часовой пояс, если параметр <code class="parameter">datetime</code>
       либо содержит метку времени UNIX наподобие <code class="literal">946684800</code>,
       либо указывает часовой пояс наподобие <code class="literal">2010-01-28T15:00:00+02:00</code>.
      </p>
     </p></blockquote>
    </dd>
   
  </dl>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-datetimeimmutable.createfromformat-returnvalues">
  <h3 class="title">Возвращаемые значения</h3>
  <p class="para">
   Метод возвращает новый экземпляр класса DateTimeImmutable или <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, если возникла ошибка.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-datetimeimmutable.createfromformat-errors">
  <h3 class="title">Ошибки</h3>
  <p class="para">
   Метод выбрасывает исключение <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
   если параметр <code class="parameter">datetime</code> содержит NUL-байты.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-datetimeimmutable.createfromformat-changelog">
  <h3 class="title">Список изменений</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Версия</th>
       <th>Описание</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>8.2.9</td>
       <td>
        Спецификатор <code class="literal"> </code> (пробел) теперь также поддерживает символы
        неразрывного пробела NBSP
        (U+A0) и узкого неразрывного пробела NNBSP (U+202F).
       </td>
      </tr>

      <tr>
       <td>8.2.0</td>
       <td>
        Добавили спецификаторы <code class="literal">X</code> и <code class="literal">x</code>
        для параметра <code class="parameter">format</code>.
       </td>
      </tr>

      <tr>
       <td>8.0.21, 8.1.8, 8.2.0</td>
       <td>
        Теперь метод выбрасывает исключение <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>,
        если в параметр <code class="parameter">datetime</code> передали NULL-байты,
        что раньше метод без предупреждения игнорировал.
       </td>
      </tr>

      <tr>
       <td>7.3.0</td>
       <td>
        Добавили спецификатор <code class="literal">v</code> для параметра <code class="parameter">format</code>.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-datetimeimmutable.createfromformat-examples">
  <h3 class="title">Примеры</h3>
  <div class="example" id="example-1">
   <p><strong>Пример #1 Пример использования метода <span class="function"><strong>DateTimeImmutable::createFromFormat()</strong></span></strong></p>
   <div class="example-contents"><p>Объектно-ориентированный стиль</p></div>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$date </span><span style="color: #007700">= </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(</span><span style="color: #DD0000">'j-M-Y'</span><span style="color: #007700">, </span><span style="color: #DD0000">'15-Feb-2009'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d'</span><span style="color: #007700">);</span></span></code></div>
   </div>

  </div>

  <div class="example" id="example-2">
   <p><strong>Пример #2 Пример передачи в метод <span class="function"><strong>DateTimeImmutable::createFromFormat()</strong></span> предопределённых констант формата</strong></p>
   <div class="example-contents"><p>Объектно-ориентированный стиль</p></div>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$date </span><span style="color: #007700">= </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">DateTimeInterface</span><span style="color: #007700">::</span><span style="color: #0000BB">ISO8601</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'2004-02-12T15:19:21+00:00'<br /></span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'c e'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$date </span><span style="color: #007700">= </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">DateTimeInterface</span><span style="color: #007700">::</span><span style="color: #0000BB">RFC3339_EXTENDED</span><span style="color: #007700">,<br />    </span><span style="color: #DD0000">'2013-10-14T09:00:00.000+02:00'<br /></span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'c e'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;</span></span></code></div>
   </div>

   <div class="example-contents"><p>
    <a href="class.datetimeinterface.php#datetimeinterface.constants.types" class="link">Константы форматирования</a>
    в этом примере состоят из строки символов
    для <a href="datetime.format.php" class="link">форматирования</a> объекта <span class="classname"><a href="class.datetimeimmutable.php" class="classname">DateTimeImmutable</a></span>.
    В большей части случаев эти буквы совпадают с теми же элементами информации о дате и времени,
    которые определили в <a href="" class="link">параметрах</a> выше,
    но обычно они более мягкие.
   </p></div>
  </div>

  <div class="example" id="example-3">
   <p><strong>Пример #3 Тонкости работы метода <span class="function"><strong>DateTimeImmutable::createFromFormat()</strong></span></strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Текущее время: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d H:i:s'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Поля «год», «месяц» и «день» метод распознает в строке разбора,<br />// а поля «час», «минута» и «секунда» заполнит значениями системного времени<br /></span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #DD0000">'Y-m-d'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$date </span><span style="color: #007700">= </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(</span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #DD0000">'2009-02-15'</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"Формат: </span><span style="color: #0000BB">$format</span><span style="color: #DD0000">; " </span><span style="color: #007700">. </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d H:i:s'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Метод распознает каждое поле в строке разбора<br /></span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #DD0000">'Y-m-d H:i:s'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$date </span><span style="color: #007700">= </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(</span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #DD0000">'2009-02-15 15:16:17'</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"Формат: </span><span style="color: #0000BB">$format</span><span style="color: #DD0000">; " </span><span style="color: #007700">. </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d H:i:s'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/**<br /> * Метод распознает каждое поле в строке разбора,<br /> * а затем сбросит поля «год» и «месяц» на начальные значения даты и времени Unix-эпохи,<br /> * поскольку эти параметры оказались слева от символа «!» в строке формата,<br /> * а поля «день», «час», «минута» и «секунда» сохранят значения, которые получили из строки разбора,<br /> * поскольку эти параметры оказались справа от символа «!» и метод распознал для них значения;<br /> * дробная часть времени со значением долей секунды вернёт значение 000000, поскольку метод<br /> * не разобрал ни милли-, ни микросекунды, а другие поля времени при этом указали<br /> */<br /></span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #DD0000">'Y-m-!d H:i:s'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$date </span><span style="color: #007700">= </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(</span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #DD0000">'2009-02-15 15:16:17'</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"Формат: </span><span style="color: #0000BB">$format</span><span style="color: #DD0000">; " </span><span style="color: #007700">. </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d H:i:s.u'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/**<br /> * Метод заполнит поле «день» значением «15», поскольку в строке формата указали символ дня<br /> * и метод распознал в строке разбора значение для этого параметра,<br /> * а остальные поля даты и времени метод сбросит на начальные значения<br /> * даты и времени эпохи Unix, поскольку для этих полей не указали<br /> * параметры и значения в строках формата и разбора<br /> */<br /></span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #DD0000">'!d'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$date </span><span style="color: #007700">= </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(</span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #DD0000">'15'</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"Формат: </span><span style="color: #0000BB">$format</span><span style="color: #DD0000">; " </span><span style="color: #007700">. </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d H:i:s'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/**<br /> * Метод заполнит поле «минуты» значением 15,<br /> * поскольку распознал в строке разбора значение для символа минут i.<br /> * Поля «год», «месяц» и «день» получат значения системной даты,<br /> * поскольку метод не разобрал эти поля в строках формата и разбора, а в строке формата<br /> * не было символов «!» или «|», при которых год, месяц и день получили бы значения начала Unix-эпохи.<br /> * А остальным полям времени метод установит нулевые значения,<br /> * поскольку метод не нашёл эти параметры и значения для них в строках формата и разбора,<br /> * но методу удалось разобрать хотя бы одно временно́е поле<br /> */<br /></span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #DD0000">'i'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$date </span><span style="color: #007700">= </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(</span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #DD0000">'15'</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"Формат: </span><span style="color: #0000BB">$format</span><span style="color: #DD0000">; " </span><span style="color: #007700">. </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d H:i:s'</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;</span></span></code></div>
   </div>

   
<div class="example-contents"><p>
 Вывод приведённого примера будет похож на:
</p></div>

   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Текущее время: 2022-06-02 15:50:46
Формат: Y-m-d; 2009-02-15 15:50:46
Формат: Y-m-d H:i:s; 2009-02-15 15:16:17
Формат: Y-m-!d H:i:s; 1970-01-15 15:16:17
Формат: !d; 1970-01-15 00:00:00
Формат: i; 2022-06-02 00:15:00</pre>
</div>
   </div>
  </div>

  <div class="example" id="example-4">
   <p><strong>Пример #4 Пример строки формата с литеральными символами</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(</span><span style="color: #DD0000">'H\h i\m s\s'</span><span style="color: #007700">,</span><span style="color: #DD0000">'23h 15m 03s'</span><span style="color: #007700">)-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'H:i:s'</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<div class="example-contents"><p>
 Вывод приведённого примера будет похож на:
</p></div>

   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">23:15:03</pre>
</div>
   </div>
  </div>

  <div class="example" id="example-5">
   <p><strong>Пример #5 Пример поведения при переполнении</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d H:i:s'</span><span style="color: #007700">, </span><span style="color: #DD0000">'2021-17-35 16:60:97'</span><span style="color: #007700">)-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">RFC2822</span><span style="color: #007700">);</span></span></code></div>
   </div>

   
<div class="example-contents"><p>
 Вывод приведённого примера будет похож на:
</p></div>

   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Sat, 04 Jun 2022 17:01:37 +0000</pre>
</div>
   </div>
   <div class="example-contents"><p>
    Результат правильный, хотя и кажется странным, причина состоит в следующих переполнениях:
   </p></div>
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      <code class="literal">97</code> секунд переполняют <code class="literal">1</code> минуту
      и оставляют <code class="literal">37</code> секунд.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <code class="literal">61</code> минута переполняет <code class="literal">1</code> час
      и оставляет <code class="literal">1</code> минуту.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <code class="literal">35</code> дней переполняют <code class="literal">1</code> месяц
      и оставляют <code class="literal">4</code> дня. Количество дней, которое останется,
      зависит от месяца, поскольку не в каждом месяце одинаковое количество дней.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <code class="literal">18</code> месяцев переполняют <code class="literal">1</code> год
      и оставляют <code class="literal">6</code> месяцев.
     </span>
    </li>
   </ol>
  </div>

  <div class="example" id="example-6">
   <p><strong>Пример #6 Пример поведения при переполнении названия дня недели</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$d </span><span style="color: #007700">= </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(</span><span style="color: #0000BB">DateTimeInterface</span><span style="color: #007700">::</span><span style="color: #0000BB">RFC1123</span><span style="color: #007700">, </span><span style="color: #DD0000">'Mon, 3 Aug 2020 25:00:00 +0000'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$d</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #0000BB">DateTime</span><span style="color: #007700">::</span><span style="color: #0000BB">RFC1123</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;</span></span></code></div>
   </div>

   
<div class="example-contents"><p>
 Вывод приведённого примера будет похож на:
</p></div>

   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Mon, 10 Aug 2020 01:00:00 +0000</pre>
</div>
   </div>
   <div class="example-contents"><p>
    Результат правильный, хотя и кажется странным, причина состоит в следующих переполнениях:
   </p></div>
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      Из-за переполнения дня количеством часов дата <code class="literal">3 Aug 2020 25:00:00</code>, понедельник,
      перетекает на <code class="literal">(Tue) 4 Aug 2020 01:00</code>, вторник.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Метод применяет понедельник — <code class="literal">Mon</code>,
      что переносит дату на следующий период с аналогичным названием дня недели —
      <code class="literal">Mon, 10 Aug 2020 01:00:00</code>.
      Объяснение относительных ключевых слов наподобие <code class="literal">Mon</code>
      описывает раздел <a href="datetime.formats.php#datetime.formats.relative" class="link">об относительных форматах</a>.
     </span>
    </li>
   </ol>
  </div>

  <p class="para">
   Метод <span class="methodname"><a href="datetimeimmutable.getlasterrors.php" class="methodname">DateTimeImmutable::getLastErrors()</a></span>
   помогает обнаружить переполнение дат
   и включает предупреждение, если возникло переполнение.
  </p>
  <div class="example" id="example-7">
   <p><strong>Пример #7 Пример обнаружения переполнения дат</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$d </span><span style="color: #007700">= </span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">createFromFormat</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d H:i:s'</span><span style="color: #007700">, </span><span style="color: #DD0000">'2021-17-35 16:60:97'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$d</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">RFC2822</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">DateTimeImmutable</span><span style="color: #007700">::</span><span style="color: #0000BB">getLastErrors</span><span style="color: #007700">());</span></span></code></div>
   </div>

   
<div class="example-contents"><p>
 Вывод приведённого примера будет похож на:
</p></div>

   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Sat, 04 Jun 2022 17:01:37 +0000

array(4) {
  &#039;warning_count&#039; =&gt;
  int(2)
  &#039;warnings&#039; =&gt;
  array(1) {
    [19] =&gt;
    string(27) &quot;The parsed date was invalid&quot;
  }
  &#039;error_count&#039; =&gt;
  int(0)
  &#039;errors&#039; =&gt;
  array(0) {
  }
}</pre>
</div>
   </div>
  </div>

  <div class="example" id="example-8">
   <p><strong>Пример #8 Пример жадного поведения при разборе</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">date_parse_from_format</span><span style="color: #007700">(</span><span style="color: #DD0000">'Gis'</span><span style="color: #007700">, </span><span style="color: #DD0000">'60101'</span><span style="color: #007700">));</span></span></code></div>
   </div>

   
<div class="example-contents"><p>
 Вывод приведённого примера будет похож на:
</p></div>

   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Array
(
    [year] =&gt;
    [month] =&gt;
    [day] =&gt;
    [hour] =&gt; 60
    [minute] =&gt; 10
    [second] =&gt; 0
    [fraction] =&gt; 0
    [warning_count] =&gt; 1
    [warnings] =&gt; Array
        (
            [5] =&gt; The parsed time was invalid
        )

    [error_count] =&gt; 1
    [errors] =&gt; Array
        (
            [4] =&gt; A two digit second could not be found
        )

    [is_localtime] =&gt;
)</pre>
</div>
   </div>
   <div class="example-contents"><p>
    Символ формата <code class="literal">G</code> разбирает поле «час» в 24-часовом формате
    с ведущим нулём или без него. Для разбора поля «час» методу требуется
    разобрать 1 или 2 цифры. Поскольку строка формата первым содержит параметр G,
    и строка разбора в начале содержит две цифры,
    которые идут одна за другой, метод жадно считывает значение часа как <code class="literal">60</code>.
   </p></div>
   <div class="example-contents"><p>
    Каждому из следующих символов формата <code class="literal">i</code> и <code class="literal">s</code> требуется две цифры.
    Поэтому число <code class="literal">10</code> передаётся как значение параметра <code class="literal">i</code>,
    который ищет в строке разбора двузначное число для установки значения полю «минута»,
    а для разбора параметра <code class="literal">s</code>,
    который также ищет двузначное число для установки значения полю «секунда», не остаётся цифр.
   </p></div>
   <div class="example-contents"><p>
    На эту проблему в структуре, которую создаёт метод, указывает массив <code class="literal">errors</code>.
   </p></div>
   <div class="example-contents"><p>
    Кроме того, значение <code class="literal">60</code> для поля «час» лежит за пределами
    диапазона <code class="literal">0</code>-<code class="literal">24</code>, что добавляет
    в массив <code class="literal">warnings</code> предупреждение о недействительности времени.
   </p></div>
  </div>

 </div>


 <div class="refsect1 seealso" id="refsect1-datetimeimmutable.createfromformat-seealso">
  <h3 class="title">Смотрите также</h3>
  <ul class="simplelist">
   <li><span class="function"><a href="datetimeimmutable.construct.php" class="function" rel="rdfs-seeAlso">DateTimeImmutable::__construct()</a> - Возвращает новый объект DateTimeImmutable</span></li>
   <li><span class="function"><a href="datetimeimmutable.getlasterrors.php" class="function" rel="rdfs-seeAlso">DateTimeImmutable::getLastErrors()</a> - Возвращает предупреждения и ошибки</span></li>
   <li><span class="function"><a href="function.checkdate.php" class="function" rel="rdfs-seeAlso">checkdate()</a> - Проверяет корректность даты по григорианскому календарю</span></li>
   <li><span class="function"><a href="function.strptime.php" class="function" rel="rdfs-seeAlso">strptime()</a> - Разбирает строку даты и времени, которую сгенерировала функция strftime</span></li>
  </ul>
 </div>


</div><?php manual_footer($setup); ?>