<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'datetimeimmutable.createfromformat.php',
    1 => 'DateTimeImmutable::createFromFormat',
    2 => 'Interpreta um string de data/hor&aacute;rio de acordo com o formato especificado',
  ),
  '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' => 'pt_BR',
    '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">Interpreta um string de data/horário de acordo com o formato especificado</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-datetimeimmutable.createfromformat-description">
  <h3 class="title">Descrição</h3>
  <p class="para">Estilo orientado a objetos</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">Estilo procedural</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">
   Retorna um novo objeto DateTimeImmutable representando a data e o horário especificados pelo
   string <code class="parameter">datetime</code>, formatado pelo parâmetro
   <code class="parameter">format</code>.
  </p>
 </div>


 <div class="refsect1 parameters" id="datetimeimmutable.createfromformat.parameters">
  <h3 class="title">Parâmetros</h3>
  <dl>
   
    <dt><code class="parameter">format</code></dt>
    <dd>
     <p class="para">
      O formato no qual a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> passada deve estar. Veja as
      opções de formatação abaixo. Na maioria dos casos, as mesmas letras da
      função <span class="function"><a href="function.date.php" class="function">date()</a></span> podem ser usadas.
     </p>
     <p class="para">
      Todos os campos são inicializados com a data/horário atual. Na maioria das vezes,
      a intenção pode ser &quot;zerá-los&quot; (época Unix, <code class="literal">1970-01-01
      00:00:00 UTC</code>). Isto pode ser feito incluindo o
      caractere <code class="literal">!</code> como o primeiro no
      parâmetro <code class="parameter">format</code>, ou <code class="literal">|</code> como o último.
      Favor verificar a documentação para cada caractere abaixo para mais
      informação.
     </p>
     <p class="para">
      O formato é analisado da esquerda para a direita, o que significa que em algumas
      situações a ordem na qual os caracteres de formato estão presents afeta
      o resultado. No caso de <code class="literal">z</code> (o dia do ano),
      é necessário que um ano já tenha sido analisado,
      por exemplo através dos caracteres <code class="literal">Y</code> ou
      <code class="literal">y</code>.
     </p>
     <p class="para">
      Letras que são usadas para representar números permitem uma ampla gama de valores,
      fora do que seria a faixa lógica. Por exemplo, a letra
      <code class="literal">d</code> (dia do mês) aceita valores na faixa de
      <code class="literal">00</code> a <code class="literal">99</code>. A única restrição é
      o número de dígitos. O mecanismo de overflow do analisador é
      usado quando valores fora da faixa são especificados. Os exemplos abaixo mostram alguns
      destes comportamentos.
     </p>
     <p class="para">
      Isto também significa que os dados analisados para um caractere de formatação são ambiciosos, e
      irão ler até a quantidade de dígitos que o formato permite. Isto pode
      também então significar que não há mais
      caracteres suficientes na string do parâmetro <code class="parameter">datetime</code>
      para os caracteres de formato seguintes. Um exemplo nesta página também
      ilustra este problema.
     </p>
     <p class="para">
      <table class="doctable table">
       <caption><strong>Os seguintes caracteres são reconhecidos na
       string do parâmetros <code class="parameter">format</code></strong></caption>
       
        <thead>
         <tr>
          <th>Caractere de <code class="parameter">format</code></th>
          <th>Descrição</th>
          <th>Exemplo de valores analisáveis</th>
         </tr>

        </thead>

        <tbody class="tbody">
         <tr>
          <td style="text-align: center;"><em>Dia</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal">d</code> e <code class="literal">j</code></td>
          <td>Dia do mês, 2 dígitos com ou sem zeros na frente</td>
          <td>
           <code class="literal">01</code> a <code class="literal">31</code> ou
           <code class="literal">1</code> a <code class="literal">31</code>. (números de 2 dígitos
           maiores queo número de dias no mês são aceitos, e neste caso
           irão causar uma transferência no mês. Por exemplo, usar 33 com
           janeiro, significa 2 de fevereiro)
          </td>
         </tr>

         <tr>
          <td><code class="literal">D</code> e <code class="literal">l</code></td>
          <td>Uma representação textual de um dia</td>
          <td>
           <code class="literal">Mon</code> a <code class="literal">Sun</code> ou
           <code class="literal">Sunday</code> a <code class="literal">Saturday</code>. Se
           o nome do dia informado for diferente do nome do dia pertencente a
           uma data analisada (ou data padrão), então uma transferência ocorre para
           a <em>próxima</em> data com o nome do dia informado. Veja os
           exemplos abaixo para uma explicação.
          </td>
         </tr>

         <tr>
          <td><code class="literal">S</code></td>
          <td>Sufixo em inglês para o ordinal do dia do mês, 2
          caracteres. É ignorado durante o processamento.</td>
          <td>
           <code class="literal">st</code>, <code class="literal">nd</code>, <code class="literal">rd</code> ou
           <code class="literal">th</code>.
          </td>
         </tr>

         <tr>
          <td><code class="literal">z</code></td>
          <td>
           O dia do ano (iniciando em 0);
           deve ser precedido de <code class="literal">Y</code> ou <code class="literal">y</code>.
          </td>
          <td>
           <code class="literal">0</code> a <code class="literal">365</code>. (números de 3 dígitos
           maiores que o número de dias em um ano são aceitos, e neste
           caso case irão causar uma transferência de ano. Por exemplo, usar 366 com
           2022, significa 2 de janeiro de 2023)
          </td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Mês</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal">F</code> e <code class="literal">M</code></td>
          <td>Uma representação textual do mês, como January ou Sept</td>
          <td>
           <code class="literal">January</code> a <code class="literal">December</code> ou
           <code class="literal">Jan</code> a <code class="literal">Dec</code>
          </td>
         </tr>

         <tr>
          <td><code class="literal">m</code> e <code class="literal">n</code></td>
          <td>Representação numérica de um mês, com ou sem zeros na frente</td>
          <td>
           <code class="literal">01</code> a <code class="literal">12</code> ou
           <code class="literal">1</code> a <code class="literal">12</code>.
           (números de 2 dígitos maiores que 12 são aceitos, e neste caso eles
           irão causar uma transferência de ano. Por exemplo, usar 13 significa janeiro do
           ano seguinte)
          </td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Ano</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal">X</code> e <code class="literal">x</code></td>
          <td>Uma representação numérica completa de um ano, <em>com até</em> 19 dígitos,
           opcionalmente prefixada por <code class="literal">+</code> ou
           <code class="literal">-</code></td>
          <td>Exemplos: <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>Uma representação numérica completa de um ano, <em>com até</em> 4 dígitos</td>
          <td>Exemplos: <code class="literal">25</code> (o mesmo que <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>
           Uma representação de dois dígitos de um ano (que assume-se estar na faixa
           1970-2069, inclusive)
          </td>
          <td>
           Exemplos:
           <code class="literal">99</code> ou <code class="literal">03</code>
           (que será interpretado como <code class="literal">1999</code> e
           <code class="literal">2003</code>, respectivamente)
          </td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Horário</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal">a</code> e <code class="literal">A</code></td>
          <td>Ante meridiem e Post meridiem</td>
          <td><code class="literal">am</code> ou <code class="literal">pm</code></td>
         </tr>

         <tr>
          <td><code class="literal">g</code> e <code class="literal">h</code></td>
          <td>Formato de 12 horas para uma hora com ou sem zeros na frente</td>
          <td>
           <code class="literal">1</code> a <code class="literal">12</code> ou
           <code class="literal">01</code> a <code class="literal">12</code> (números de 2 dígitos
           maiores que 12 são aceitos, e neste caso eles irão
           causar uma transferência de período AM/PM. Por exemplo, usar <code class="literal">14</code> significa
           <code class="literal">02</code> no próximo período AM/PM)
          </td>
         </tr>

         <tr>
          <td><code class="literal">G</code> e <code class="literal">H</code></td>
          <td>Formato de 24 horas para uma hora com ou sem zeros na frente</td>
          <td>
           <code class="literal">0</code> a <code class="literal">23</code> ou
           <code class="literal">00</code> a <code class="literal">23</code> (números de 2 dígitos
           maiores que 24 são aceitos, e neste caso eles irão causar
           uma transferência de dia. Por exemplo, usar <code class="literal">26</code> significa
           <code class="literal">02:00</code> do dia seguinte)
          </td>
         </tr>

         <tr>
          <td><code class="literal">i</code></td>
          <td>Minutos com zero na frente</td>
          <td>
           <code class="literal">00</code> a <code class="literal">59</code>. (números de 2 dígitos
           maiores que 59 são aceitos, e neste caso irão causar
           uma transferência de hora. Por exemplo, usar <code class="literal">66</code> significa
           <code class="literal">:06</code> da hora seguinte)
          </td>
         </tr>

         <tr>
          <td><code class="literal">s</code></td>
          <td>Segundos, com zero na frente</td>
          <td>
           <code class="literal">00</code> a <code class="literal">59</code> (números de 2 dígitos
           maiores que 59 são aceitos, e neste caso irão causar
           uma transferência de minuto. Por exemplo, usar <code class="literal">90</code> significa
           <code class="literal">:30</code> do próximo minuto)
          </td>
         </tr>

         <tr>
          <td><code class="literal">v</code></td>
          <td>Fração em milissegundos (até três dígitos)</td>
          <td>Exemplo: <code class="literal">12</code> (<code class="literal">0.12</code>
          segundo), <code class="literal">345</code> (<code class="literal">0.345</code> segundo)</td>
         </tr>

         <tr>
          <td><code class="literal">u</code></td>
          <td>Fração em microssegundos (até seis dígitos)</td>
          <td>Exemplo: <code class="literal">45</code> (<code class="literal">0.45</code>
          segundo) <code class="literal">654321</code> (<code class="literal">0.654321</code>
          segundo)</td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Fuso horário</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> e <code class="literal">T</code>
          </td>
          <td>Identificador do fuso horário, ou a diferença para UTC em horas, ou
          a diferença para UTC com dois pontos entre horas e minutos, ou
          abreviação do fuso horário</td>
          <td>Exemplos: <code class="literal">UTC</code>, <code class="literal">GMT</code>,
           <code class="literal">Atlantic/Azores</code> ou
           <code class="literal">+0200</code> ou <code class="literal">+02:00</code> ou
           <code class="literal">EST</code>, <code class="literal">MDT</code>
          </td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Data/Horário completos</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal">U</code></td>
          <td>Segundos desde a Época Unix (1 janeiro 1970 00:00:00 GMT)</td>
          <td>Exemplo: <code class="literal">1292177455</code></td>
         </tr>

         <tr>
          <td style="text-align: center;"><em>Espaços em branco e separadores</em></td>
          <td>---</td>
          <td>---</td>
         </tr>

         <tr>
          <td><code class="literal"> </code> (espaço)</td>
          <td>Zero ou mais espaços, tabulações, caracteres NBSP (U+A0),
          ou NNBSP (U+202F)</td>
          <td>Exemplo: <code class="literal">&quot;\t&quot;</code>, <code class="literal">&quot;  &quot;</code></td>
         </tr>

         <tr>
          <td><code class="literal">#</code></td>
          <td>
           Um dos símbolos de separação: <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> ou
           <code class="literal">)</code>
          </td>
          <td>Exemplo: <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> ou
           <code class="literal">)</code>
          </td>
          <td>O caractere especificado.</td>
          <td>Exemplo: <code class="literal">-</code></td>
         </tr>

         <tr>
          <td><code class="literal">?</code></td>
          <td>Um byte aleatório</td>
          <td>Exemplo: <code class="literal">^</code> (Esteja ciente que para caracteres UTF-8
          pode ser necessário mais de um <code class="literal">?</code>.
          Neste caso, usar <code class="literal">*</code> pode ser o o mais
          adequado na verdade)</td>
         </tr>

         <tr>
          <td><code class="literal">*</code></td>
          <td>Bytes aleatórios até o próximo separador ou dígito</td>
          <td>Exemplo: <code class="literal">*</code> em <code class="literal">Y-*-d</code> com
          o string <code class="literal">2009-aWord-08</code> será equivalente a
          <code class="literal">aWord</code></td>
         </tr>

         <tr>
          <td><code class="literal">!</code></td>
          <td>Reconfigura todos os campos (ano, mês, dia, hora, minuto, segundo,
          fração e informação de fuso horário) com valores tipo zero (
           <code class="literal">0</code> para hora, minuto, segundo e fração,
           <code class="literal">1</code> para mês e dia, <code class="literal">1970</code>
           para ano e o fuso horário padrão)</td>
          <td>Sem <code class="literal">!,</code> todos os campos serão configurados com a
          data/horário atual.</td>
         </tr>

         <tr>
          <td><code class="literal">|</code></td>
          <td>Reconfigura todos os campos (ano, mês, dia, hora, minuto, segundo,
          fração e informação de fuso horário) com valores tipo zero se eles
          ainda não foram analisados</td>
          <td><code class="literal">Y-m-d|</code> irá configurar o ano, mês e dia
          para as informações encontradas na string a ser analisada, e configura a hora,
          minuto e segundo para 0.</td>
         </tr>

         <tr>
          <td><code class="literal">+</code></td>
          <td>Se esta especificação de formato estiver presente, dados no final da
          string não irão causar um erro, mas sim um aviso</td>
          <td>Use <span class="methodname"><a href="datetimeimmutable.getlasterrors.php" class="methodname">DateTimeImmutable::getLastErrors()</a></span> para descobrir
          se dados no final da string estavam presentes.</td>
         </tr>

        </tbody>
       
      </table>

     </p>
     <p class="para">
      Caracteres não reconhecidos na string de formatação irão causar
      falha na análise e uma mensagem de erro será anexada na estrutura
      retornada. É possível recuperar a mensagem de erro com
      <span class="methodname"><a href="datetimeimmutable.getlasterrors.php" class="methodname">DateTimeImmutable::getLastErrors()</a></span>.
     </p>
     <p class="para">
      Para incluir caracteres literais no parâmetro <code class="parameter">format</code>, deve-se
      usar a barra invertida (<code class="literal">\</code>) antes deles.
     </p>
     <p class="para">
      Se <code class="parameter">format</code> não contiver o caractere
      <code class="literal">!</code> então partes da data/horário gerada que não foram
      especificadas em <code class="parameter">format</code> serão configuradas para a
      data/horário atual do sistema.
     </p>
     <p class="para">
      Se <code class="parameter">format</code> contiver o
      caractere <code class="literal">!</code>, então partes da data/horário
      gerada não especificada em <code class="parameter">format</code>, assim como
      valores à esquerda de <code class="literal">!</code>, serão
      configuradas aos valores correspondentes da época Unix.
     </p>
     <p class="para">
      Se algum caractere de horário for analisado, então todos os outros campos relacionados a horário são
      configurados para &quot;0&quot;, a menos que também tenham sido analisados.
     </p>
     <p class="para">
      A Época Unix é 1970-01-01 00:00:00 UTC.
     </p>
    </dd>
   
   
    <dt><code class="parameter">datetime</code></dt>
    <dd>
     <p class="para">
      String representando a data/horário.
     </p>
    </dd>
   
   
    <dt><code class="parameter">timezone</code></dt>
    <dd>
     <p class="para">
      Um objeto <span class="classname"><a href="class.datetimezone.php" class="classname">DateTimeZone</a></span> representando o
      fuso horário desejado.
     </p>
     <p class="para">
      Se <code class="parameter">timezone</code> for <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> ou omitido e
      <code class="parameter">datetime</code> não contém o fuso horário,
      o fuso atual será usado.
     </p>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <p class="para">
       O parâmetro <code class="parameter">timezone</code>
       e o fuso horário atual são ignorados quando o parâmetro
       <code class="parameter">datetime</code> contém
       um timestamp UNIX (ex.: <code class="literal">946684800</code>)
       ou especifica um fuso horário
       (ex.: <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">Valor Retornado</h3>
  <p class="para">
   Retorna uma nova instância de DateTimeImmutable ou <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> em caso de falha.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-datetimeimmutable.createfromformat-errors">
  <h3 class="title">Erros/Exceções</h3>
  <p class="para">
   Este método lança uma exceção <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> quando o
   parâmetro <code class="parameter">datetime</code> contiver bytes nulos.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-datetimeimmutable.createfromformat-changelog">
  <h3 class="title">Registro de Alterações</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Versão</th>
       <th>Descrição</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>8.2.9</td>
       <td>
        O especificador <code class="literal"> </code> (space) agora também suporta caracteres NBSP
        (U+A0) e NNBSP (U+202F).
       </td>
      </tr>

      <tr>
       <td>8.2.0</td>
       <td>
        Os especificadores <code class="literal">X</code> e <code class="literal">x</code> de
        <code class="parameter">format</code> foram adicionados.
       </td>
      </tr>

      <tr>
       <td>8.0.21, 8.1.8, 8.2.0</td>
       <td>
        Agora lança a exceção <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> quando bytes nulos
        são passados no parâmetro <code class="parameter">datetime</code>, o que antes era silenciosamente
        ignorado.
       </td>
      </tr>

      <tr>
       <td>7.3.0</td>
       <td>
        O especificador <code class="literal">v</code> em <code class="parameter">format</code> foi
        adicionado.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-datetimeimmutable.createfromformat-examples">
  <h3 class="title">Exemplos</h3>
  <div class="example" id="example-1">
   <p><strong>Exemplo #1 Exemplo de <span class="function"><strong>DateTimeImmutable::createFromFormat()</strong></span></strong></p>
   <div class="example-contents"><p>Estilo orientado a objetos</p></div>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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>Exemplo #2 Usando constantes predefinidas de formato com <span class="function"><strong>DateTimeImmutable::createFromFormat()</strong></span></strong></p>
   <div class="example-contents"><p>Estilo orientado a objetos</p></div>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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>
    As <a href="class.datetimeinterface.php#datetimeinterface.constants.types" class="link">constantes de formatação</a>
    como usadas neste exemplo consistem de
    uma string de caracteres para <a href="datetime.format.php" class="link">formatar</a> um
    objeto <span class="classname"><a href="class.datetimeimmutable.php" class="classname">DateTimeImmutable</a></span>. Na maioria dos casos, estas
    letras são equivalentes aos elementos de data/horário definidos na seção <a href="" class="link">parameters</a>
    acima, mas elas tendem a ser mais lenientes.
   </p></div>
  </div>

  <div class="example" id="example-3">
   <p><strong>Exemplo #3 Complexidades de <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 /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Horário atual: ' </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: #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">"Formato: </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: #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">"Formato: </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: #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">"Formato: </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: #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">"Formato: </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: #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">"Formato: </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>O exemplo acima produzirá
algo semelhante a:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Horário atual: 2022-06-02 15:50:46
Formato: Y-m-d; 2009-02-15 15:50:46
Formato: Y-m-d H:i:s; 2009-02-15 15:16:17
Formato: Y-m-!d H:i:s; 1970-01-15 15:16:17
Formato: !d; 1970-01-15 00:00:00
Formato: i; 2022-06-02 00:15:00</pre>
</div>
   </div>
  </div>

  <div class="example" id="example-4">
   <p><strong>Exemplo #4 String de formatação com caracteres literais</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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>O exemplo acima produzirá
algo semelhante a:</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>Exemplo #5 Comportamento de transferência</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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>O exemplo acima produzirá
algo semelhante a:</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>
    Embora o resultado pareça estranho, ele está correto, já que as transferências abaixo
    ocorrem:
   </p></div>
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      <code class="literal">97</code> segundos transferem para <code class="literal">1</code> minuto,
      sobrando <code class="literal">37</code> segundos.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <code class="literal">61</code> minutos transferem para <code class="literal">1</code> hora,
      sobrando <code class="literal">1</code> minuto.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <code class="literal">35</code> dias transferem para <code class="literal">1</code> mês,
      sobrando <code class="literal">4</code> dias. A quantidade de dias que sobram
      depende do mês, já que nem todo mês tem o mesmo número de dias.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <code class="literal">18</code> meses transferem para <code class="literal">1</code> ano,
      sobrando <code class="literal">6</code> meses.
     </span>
    </li>
   </ol>
  </div>

  <div class="example" id="example-6">
   <p><strong>Exemplo #6 Comportamento de transferência do nome do dia</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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>O exemplo acima produzirá
algo semelhante a:</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>
    Embora o resultado pareça estranho, ele está correto, já que as transferências abaixo
    ocorrem:
   </p></div>
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      <code class="literal">3 Aug 2020 25:00:00</code> transfere para <code class="literal">(Tue) 4 Aug
      2020 01:00</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <code class="literal">Mon</code> é aplicado, o que avança a data para
      <code class="literal">Mon, 10 Aug 2020 01:00:00</code>. A explicação para
      as palavras-chaves relativas como <code class="literal">Mon</code> está disponível na
      seção sobre <a href="datetime.formats.php#datetime.formats.relative" class="link">formatos
      relativos</a>.
     </span>
    </li>
   </ol>
  </div>

  <p class="para">
   Para detectar transferências em datas/horas, pode-se usar
   o método <span class="methodname"><a href="datetimeimmutable.getlasterrors.php" class="methodname">DateTimeImmutable::getLastErrors()</a></span>, que irá
   incluir um aviso se uma transferência tiver ocorrido.
  </p>
  <div class="example" id="example-7">
   <p><strong>Exemplo #7 Detectando transferência de datas/horas</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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>O exemplo acima produzirá
algo semelhante a:</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>Exemplo #8 Comportamento de análise ambicioso</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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>O exemplo acima produzirá
algo semelhante a:</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>
    O formato <code class="literal">G</code> analisa horas no formato de 24 horas, com ou
    sem zeros na frente. Isto requer analisar 1 ou 2 dígitos. Como há
    dois dígitos disponíveis, o analisador ambiciosamente lê o valor como <code class="literal">60</code>.
   </p></div>
   <div class="example-contents"><p>
    Os caracteres seguintes <code class="literal">i</code> e <code class="literal">s</code>
    ambos requerem dois dígitos. Isto significa que <code class="literal">10</code>
    é passado como minutos (<code class="literal">i</code>), e que não há então
    dígitos suficientes restantes para serem analisados como segundos (<code class="literal">s</code>).
   </p></div>
   <div class="example-contents"><p>
    O array <code class="literal">errors</code> indica este problema.
   </p></div>
   <div class="example-contents"><p>
    Adicionalmente, um valor de hora de <code class="literal">60</code> está fora da faixa
    <code class="literal">0</code>-<code class="literal">24</code>, o que faz com que o array de
    <code class="literal">warnings</code> inclua um aviso de que o horário é
    inválido.
   </p></div>
  </div>

 </div>


 <div class="refsect1 seealso" id="refsect1-datetimeimmutable.createfromformat-seealso">
  <h3 class="title">Veja Também</h3>
  <ul class="simplelist">
   <li><span class="function"><a href="datetimeimmutable.construct.php" class="function" rel="rdfs-seeAlso">DateTimeImmutable::__construct()</a> - Retorna um novo objeto DateTimeImmutable</span></li>
   <li><span class="function"><a href="datetimeimmutable.getlasterrors.php" class="function" rel="rdfs-seeAlso">DateTimeImmutable::getLastErrors()</a> - Retorna os avisos e erros</span></li>
   <li><span class="function"><a href="function.checkdate.php" class="function" rel="rdfs-seeAlso">checkdate()</a> - Valida uma data gregoriana</span></li>
   <li><span class="function"><a href="function.strptime.php" class="function" rel="rdfs-seeAlso">strptime()</a> - Interpreta uma data/hor&aacute;rio gerada pela fun&ccedil;&atilde;o strftime</span></li>
  </ul>
 </div>


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