<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog do Beraldo &#187; date</title>
	<atom:link href="http://www.rberaldo.com.br/blog/tag/date/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rberaldo.com.br/blog</link>
	<description>Programação, Música, Entretenimento e o que mais me vier à mente</description>
	<lastBuildDate>Wed, 25 Jan 2012 14:23:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>PHP: Conversão de Datas: formato brasileiro e formato ISO</title>
		<link>http://www.rberaldo.com.br/blog/php-conversao-de-datas-formato-brasileiro-e-formato-iso/</link>
		<comments>http://www.rberaldo.com.br/blog/php-conversao-de-datas-formato-brasileiro-e-formato-iso/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 14:51:33 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[converter]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[eficiente]]></category>
		<category><![CDATA[rapido]]></category>
		<category><![CDATA[tempo]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=302</guid>
		<description><![CDATA[Comparação entre quatro maneiras de se converter datas no formato brasileiro para o formato ISO e vice-versa, a fim de encontrar a mais eficiente]]></description>
			<content:encoded><![CDATA[<p>Uma das principais e mais frequentes dúvidas em fóruns é sobre tratamento de datas. O formato brasileiro é dd/mm/yyy, porém os bancos de dados, por exemplo, trabalham com a data no formato <a href="http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/date_and_time_format.htm" title="Link, em inglês, sobre a ISO 8601" onclick="urchinTracker('/outgoing/www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/date_and_time_format.htm?referer=');">ISO 8601</a>, ou seja, yyyy-mm-dd.</p>
<p>Face a isso, muitos têm dúvidas em como converter do formato brasileiro para o ISO e vice-versa. É possível fazer isso de várias formas, mas pretendo mostrar aqui as principais delas, comparando o tempo de execução de cada uma, a fim de encontrar a mais eficiente.</p>
<p><span id="more-302"></span></p>
<p>Vamos a quatro exemplos.</p>
<p>O primeiro exemplo usa arrays, com as funções implode, explode, e array_reverse. É talvez o mais usado. Pelo menos é o que mais aparece por aí.</p>
<p>date1.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$time</span> <span style="color: #339933;">=</span> <span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$date</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'2011-01-15'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array_reverse</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'-'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$time</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O segundo exemplo usa ER&#8217;s, utilizando a função preg_replace:</p>
<p>date2.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$time</span> <span style="color: #339933;">=</span> <span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$date</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'2011-01-15'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'/([0-9]+)-([0-9]+)-([0-9]+)/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'$3/$2/$1'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$time</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O exemplo 3 usa printf e scanf  (e semelhantes), sem usar variáveis auxiliares, ou seja, fazendo sscanf retornar um array, que é lido por vprintf.</p>
<p>date3.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$time</span> <span style="color: #339933;">=</span> <span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$date</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'2011-01-15'</span><span style="color: #339933;">;</span>
<span style="color: #990000;">vprintf</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%d</span>/<span style="color: #009933; font-weight: bold;">%d</span>/<span style="color: #009933; font-weight: bold;">%d</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array_reverse</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">sscanf</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$date</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%d</span>-<span style="color: #009933; font-weight: bold;">%d</span>-<span style="color: #009933; font-weight: bold;">%d</span>&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$time</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O exemplo 4 usa, novamente, printf e scanf (e semelhantes), mas usa variáveis auxiliares, para evitar o uso de array, da forma como é normalmente usada em linguagens como C e C++.</p>
<p>date4.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$time</span> <span style="color: #339933;">=</span> <span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$date</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'2011-01-15'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">sscanf</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$date</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%d</span>-<span style="color: #009933; font-weight: bold;">%d</span>-<span style="color: #009933; font-weight: bold;">%d</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$y</span><span style="color: #339933;">,</span> <span style="color: #000088;">$m</span><span style="color: #339933;">,</span> <span style="color: #000088;">$d</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%d</span>/<span style="color: #009933; font-weight: bold;">%d</span>/<span style="color: #009933; font-weight: bold;">%d</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$d</span><span style="color: #339933;">,</span> <span style="color: #000088;">$m</span><span style="color: #339933;">,</span> <span style="color: #000088;">$y</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$time</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Vamos executar os quatro scripts e analisar as saídas deles. Note que aparecerão a data convertida e o tempo de execução de cada um deles. Perceba que o tempo é um float em notação científica.</p>
<p>Saída:</p>
<pre>
date1.php
15/01/2011
float(4.4107437133789E-5)

date2.php
15/01/2011
float(0.0001068115234375)

date3.php
15/01/2011
float(5.1021575927734E-5)

date4.php
15/01/2011
float(3.9815902709961E-5)
</pre>
<p>Aparentemente, o date2.php foi mais rápido, mas, novamente, note a notação científica. Todos os demais estão multiplicados por 10^-5, enquanto o date2.php não está. Logo, ele é o mais lento, não o mais rápido. O mais rápido no teste acima foi o date4.php.</p>
<p>Ou seja, a melhor função para converter datas seria esta:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> converteData<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$data</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> <span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$data</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'/'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">// $data está no formato ISO (yyyy-mm-dd) e deve ser convertida</span>
                <span style="color: #666666; font-style: italic;">// para dd/mm/yyyy</span>
                <span style="color: #990000;">sscanf</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$data</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'%d-%d-%d'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$y</span><span style="color: #339933;">,</span> <span style="color: #000088;">$m</span><span style="color: #339933;">,</span> <span style="color: #000088;">$d</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">return</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'%d/%d/%d'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$d</span><span style="color: #339933;">,</span> <span style="color: #000088;">$m</span><span style="color: #339933;">,</span> <span style="color: #000088;">$y</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">else</span>
        <span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">// $data está no formato brasileiro e deve ser convertida para ISO</span>
                <span style="color: #990000;">sscanf</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$data</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'%d/%d/%d'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$d</span><span style="color: #339933;">,</span> <span style="color: #000088;">$m</span><span style="color: #339933;">,</span> <span style="color: #000088;">$y</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">return</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'%d-%d-%d'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$y</span><span style="color: #339933;">,</span> <span style="color: #000088;">$m</span><span style="color: #339933;">,</span> <span style="color: #000088;">$d</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>O tempo de execução pode variar de máquina para máquina. Testei em um AMD Phenon X4 9550. Em alguns outros testes, date1.php ficou muito perto de date4.php, às vezes sendo até mais rápido. Porém na maioria das vezes o date4.php foi mais rápido.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/php-conversao-de-datas-formato-brasileiro-e-formato-iso/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP: Usando a classe nativa DateTime</title>
		<link>http://www.rberaldo.com.br/blog/php-usando-a-classe-nativa-datetime/</link>
		<comments>http://www.rberaldo.com.br/blog/php-usando-a-classe-nativa-datetime/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 18:36:49 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[datetime]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[time]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=154</guid>
		<description><![CDATA[A partir do PHP 5.2.0, há uma maneira nativa e simples de se trabalhar com datas e horários, com ajuda da classe DateTime. Neste artigo, vou mostrar algumas das utilidades dessa classe.]]></description>
			<content:encoded><![CDATA[<p>A partir do PHP 5.2.0, há uma maneira nativa e simples de se trabalhar com datas e horários, com ajuda da classe <a href="http://br.php.net/manual/en/class.datetime.php" target="_blank" onclick="urchinTracker('/outgoing/br.php.net/manual/en/class.datetime.php?referer=');">DateTime</a>.</p>
<p>Neste artigo, vou mostrar algumas das utilidades dessa classe. Eu nunca a usei antes, estou aprendendo-a agora, enquanto monto o post. Logo, contribuições serão muito bem-vindas.</p>
<p>Vamos iniciar mostrando como funciona o construtor da classe.</p>
<p><span id="more-154"></span></p>
<p>Índice:<br />
<a href="#construct">1. Construtor da classe</a><br />
<a href="#format">2. Formatando datas</a><br />
<a href="#add">3. Adicionando períodos a datas</a><br />
<a href="#sub">4. Subtraindo períodos de uma data</a><br />
<a href="#diff">5. Calculando diferença entre datas</a><br />
<a href="#set">6. Modificando a data e a hora do objeto</a></p>
<h3><a name="construct">1. Construtor da classe</a></h3>
<p>Sintaxe do construtor:</p>
<p> <strong>DateTime::__construct  ([ string $time = "now"  [, DateTimeZone $timezone = NULL  ]] )</strong></p>
<p>Esse método aceita dois parâmetros, ambos opcionais. O primeiro é a data/hora, no mesmo formato aceito pela função <a href="http://br2.php.net/strftime" target="_blank" onclick="urchinTracker('/outgoing/br2.php.net/strftime?referer=');">strftime()</a>. O segundo consiste no <em>timezone</em> que deve ser utilizado. Ele deve ser uma instância da classe <a href="http://br2.php.net/manual/en/class.datetimezone.php" target="_blank" onclick="urchinTracker('/outgoing/br2.php.net/manual/en/class.datetimezone.php?referer=');">DateTimeZone</a>. Outra maneira de definir o <em>timezone</em> é por meio da função <a href="http://br.php.net/date_default_timezone_set" target="_blank" onclick="urchinTracker('/outgoing/br.php.net/date_default_timezone_set?referer=');">date_default_timezone_set()</a>.</p>
<p>Ambas as classes DateTime e DateTimeZone disparam uma exceção se seus construtores receberem parâmetro inválidos. Logo, podemos usar blocos try/catch para instanciar essas classes.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">try
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$DateTime</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DateTime<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'now'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">new</span> DateTimeZone<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'America/Sao_Paulo'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
catch<span style="color: #009900;">&#40;</span> Exception <span style="color: #000088;">$e</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Erro ao instanciar objeto.&lt;br /&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Experimente trocar o &#8220;now&#8221; por um valor não aceito pelo método, como uma string qualquer. Uma exceção será disparada.</p>
<h3><a name="format">2. Formatando datas</a></h3>
<p>Para formatar datas, usamos o método <em>format</em>, que aceita um parâmetro, correspondente a uma formatação de data aceita pela função <a href="http://br.php.net/manual/en/function.date.php" target="_blank" onclick="urchinTracker('/outgoing/br.php.net/manual/en/function.date.php?referer=');">date()</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$DateTime</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DateTime<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y H:i:s&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;Y-m-d H:i:s&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;Y/m/d H:i:s&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span></pre></div></div>

<h3><a name="add">3. Adicionando períodos a datas</a></h3>
<p>Com o método <em>add()</em>, podemos adicionar períodos à data salva no objeto DateTime. É possível adicionar períodos de dias, períodos de tempo ou ambos, seguindo a formatação aceita pelo método, que recebe um único parâmetro, o qual é uma instância da classe <a href="http://br.php.net/manual/en/class.dateinterval.php" target="_blank" onclick="urchinTracker('/outgoing/br.php.net/manual/en/class.dateinterval.php?referer=');">DateInterval</a>, responsável por manipular os dados do período especificado. </p>
<p>Os períodos são especificados da seguinte maneira: períodos de dias são precedidos pela letra &#8220;P&#8221;, seguidas de inteiros e seus respectivos identificadores de tempo (&#8220;D&#8221; para dias, &#8220;M&#8221; para meses e &#8220;Y&#8221; para anos). Períodos de tempo são precedidos pela letra &#8220;T&#8221; e seguidos de inteiros e seus respectivos identificadores de unidade (&#8220;H&#8221; para horas, &#8220;M&#8221; para minutos e &#8220;S&#8221; para segundos).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$DateTime</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DateTime<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> DateInterval<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;P30D&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// adiciona 30 dias</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> DateInterval<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;P2M&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// adiciona 2 meses</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> DateInterval<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;P5Y&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// adiciona 5 anos</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> DateInterval<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;P5Y2M30D&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// adiciona 30 dias, 2 meses e 5 anos</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span></pre></div></div>

<p>Note que cada adição é feita com base na adição anterior, uma vez que cada soma modifica a data armazenada no objeto.</p>
<h3><a name="sub">4. Subtraindo períodos de uma data</a></h3>
<p>O método <em>sub</em> funciona da mesma forma que o <em>add</em>, com a mesma lista de parâmetros, mas, logicamente, em vez de adicionar períodos, ele os subtrai.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$DateTime</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DateTime<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sub</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> DateInterval<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;P30D&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// subtrai 30 dias</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sub</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> DateInterval<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;P2M&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// subtrai 2 meses</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sub</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> DateInterval<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;P5Y&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// subtrai 5 anos</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sub</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> DateInterval<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;P5Y2M30D&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// subtrai 30 dias, 2 meses e 5 anos</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span></pre></div></div>

<h3><a name="diff">5. Calculando diferença entre datas</a></h3>
<p>Usando o método <em>diff</em>, podemos calcular o intervalo entre duas datas, com precisão de dias, meses, anos, horas, minutos e segundos. Esse método retorna uma instância da classe DateInterval, já citada anteriormente neste artigo.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$DateTime</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DateTime<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$diff</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">diff</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> DateTime<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'2009-02-14'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Diferença de:&lt;br /&gt;
&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$diff</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">d</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; dias&lt;br /&gt;
&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$diff</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">m</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; meses&lt;br /&gt;
&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$diff</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">y</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; anos&lt;br /&gt;
&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$diff</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">h</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; horas&lt;br /&gt;
&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$diff</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">i</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; minutos&lt;br /&gt;
&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$diff</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">s</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; segundos&lt;br /&gt;
&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<h3><a name="set">6. Modificando a data e a hora do objeto</a></h3>
<p>Para modificar a data e a hora armazenadas no objeto, utilizamos os métodos <em>setDate</em> e <em>setTime</em>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$DateTime</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DateTime<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y H:i&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setDate</span><span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">2007</span><span style="color: #339933;">,</span> <span style="color: #208080;">07</span><span style="color: #339933;">,</span> <span style="color: #208080;">07</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setTime</span><span style="color: #009900;">&#40;</span> <span style="color: #208080;">07</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">27</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$DateTime</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;d/m/Y H:i&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span></pre></div></div>

<p>Espero que tenha ficado tudo claro para todos. A utilização das classes não é difícil. Mais informações podem ser obtidas na documentação oficial.</p>
<p>Link úteis:<br />
<a href="http://br.php.net/manual/en/class.datetime.php" target="_blank" onclick="urchinTracker('/outgoing/br.php.net/manual/en/class.datetime.php?referer=');">Documentação da classe DateTime</a><br />
<a href="http://br.php.net/manual/en/class.datetimezone.php" target="_blank" onclick="urchinTracker('/outgoing/br.php.net/manual/en/class.datetimezone.php?referer=');">Documentação da classe DateTimeZone</a><br />
<a href="http://br.php.net/manual/en/class.dateinterval.php" target="_blank" onclick="urchinTracker('/outgoing/br.php.net/manual/en/class.dateinterval.php?referer=');">Documentação da classe DateTimeInterval</a><br />
<a href="http://br.php.net/manual/en/ref.datetime.php" target="_blank" onclick="urchinTracker('/outgoing/br.php.net/manual/en/ref.datetime.php?referer=');">Funções de data e hora do PHP</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/php-usando-a-classe-nativa-datetime/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

