<?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>Technócil &#187; pho</title>
	<atom:link href="http://technocil.com/tag/pho/feed/" rel="self" type="application/rss+xml" />
	<link>http://technocil.com</link>
	<description></description>
	<lastBuildDate>Tue, 24 Aug 2010 21:24:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Trabalhando com Datas em PHP &amp; MySQL</title>
		<link>http://technocil.com/2009/04/07/trabalhando-com-datas-em-php-mysql/</link>
		<comments>http://technocil.com/2009/04/07/trabalhando-com-datas-em-php-mysql/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 12:46:13 +0000</pubDate>
		<dc:creator>João Vagner</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[Destaques]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[datas]]></category>
		<category><![CDATA[pho]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=261</guid>
		<description><![CDATA[Bom dia,
Datas, hora, minutos, meses, anos, informações que nos deslocam às nossas tarefas diárias, ou que nos deixam desesperados porque o tempo é pouco para tal coisa ou compromisso, pois é, data esta dentro do tempo, que nem sempre esta à nosso favor. Deixa-mos a filosofia de lado, blá nunca fui bom filosófo, quer dizer, [...]]]></description>
			<content:encoded><![CDATA[<p>Bom dia,</p>
<p>Datas, hora, minutos, meses, anos, informações que nos deslocam às nossas tarefas diárias, ou que nos deixam desesperados porque o tempo é pouco para tal coisa ou compromisso, pois é, data esta dentro do tempo, que nem sempre esta à nosso favor. Deixa-mos a filosofia de lado, blá nunca fui bom filosófo, quer dizer, jamais fui um, então comecemos logo à entender um pouco datas.</p>
<h2>Formatos de datas no Mundão!</h2>
<p>O php, a linguagem de inicio que vou usar nesse post, tem a função <strong><a href="http://br2.php.net/manual/pt_BR/function.strftime.php">strftime()</a>, </strong>ela faz a formatação de uma hora/data com as configurações locais dos paises, é importante frisar que em servidores windows, é preciso usar a função <strong><a href="http://br2.php.net/manual/pt_BR/function.setlocale.php">setlocale()</a></strong> para definir a linguagem da localidade que você vai usar, e ler no <strong>MSDN</strong> as suportadas, porque claro, o <strong><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_country_strings.asp">Windows</a></strong> complica mais do que ajuda!</p>
<p><em>Exemplo de datas com fuso horario de outros paises</em></p>
<p><em>Alemanha</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//Seta o local, de_DE = alemanhã (German)</span>
<span style="color: #990000;">setlocale</span><span style="color: #009900;">&#40;</span>LC_TIME<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;deu&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #990000;">strftime</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; estamos na  German (Alemão) %A.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><em>Portugues Brasil</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//Seta o local, &quot;portuguese-brazil&quot; ou &quot;ptb&quot; = Português Brasil</span>
<span style="color: #990000;">setlocale</span><span style="color: #009900;">&#40;</span>LC_TIME<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;portuguese-brazil&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #990000;">strftime</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; estamos no Brasil  (Português) %A.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<h2>Formas de String:</h2>
<blockquote><p>%a &#8211; dia da semana abreviado de acordo com a localidade<br />
%A &#8211; nome da semana completo de acordo com a localidade</p></blockquote>
<p>Mais sobre as formas de string em <a href="http://br2.php.net/manual/pt_BR/function.strftime.php">PHP.Net</a> ( Manual).</p>
<p>Bom, agora que a parte de deixar configurado à data de acordo com sua localidade ou com a necessidade mesmo do desenvolvedor, por exemplo se você estiver trabalhando em um sistema que poderá ser usado em outros paìses (nossa, elevei o pessoal a programadores mundiais!), isso pode poupar-lhe de muita dor de cabeça, gritos, socos, murros, monitores, gabinetes, e HD&#8217;s!</p>
<h2>Datas em formato Timestamp</h2>
<blockquote><p>An extension of the DATE datatype that can store date and time data (including fractional seconds). The timestamp type takes 11 bytes of storage.</p></blockquote>
<p>Inglês péssimo né? é? então eu vou lhe dar uma linguada básicanisso e verbalizar essa budêga:</p>
<blockquote><p><cite>Uma extensão do datatype (tipo de data) da DATA que pode armazenar dados da data e da hora ( com segundos fracionários incluídos).  O tipo do timestamp faz exame de 11 bytes de  armazenamento..</cite></p></blockquote>
<p>Nossa, meu inglês é uma bosta também, mas o português tambem é fraco, mas é isso. é uma extenção de data para armazenamento de data hora e informações facionarias como segundos, blá e blá, se você quiser uma data exata mesmo, no real sentido, isso é sua solução!</p>
<h2>Timestamp em MySQL e outros tipos</h2>
<p>O Nosso Manual MySQL nos diz, que <strong><a href="http://dev.mysql.com/doc/refman/4.1/pt/datetime.html">DATETIMES</a></strong> e <strong><a href="http://dev.mysql.com/doc/refman/4.1/pt/datetime.html">TIMESTAMP</a></strong> são relacionadas, calma, elas não tem relações sexuais, vão ter datazinhas gritando, chorando e chamando você de titio não! nossa, mente poluída a minha não?! Elas são apenas parecidas, ou tem a mesma função, até hoje nunca descobri, ou tenho certeza disso! hahahaha!</p>
<p>Os formatos de DATE do MySQL se reservam apenas à Ano, dia e Mês: <em>YYYY-DD-MM</em>, não temos a opção de segundos fracionários, então neca de comparação exata usando segundos com esse tipo de campo.</p>
<p>Agora em Timestamp como diz a descrição da extenção, temos opção fracionária, que ficará no formato de: YYYY-DD-MM HH:MM:SS, po, mas ta feio pacas isso não? Os Brasileiros não leem datas nesse formato americano, então o MySQL permite usar o padrão de data Brasileiro ? que é DD-MM-YYYY, cara, sei não, se tiver desconheço, e não recomendo! já vou explicar os motivos.</p>
<p>Imagine essa  situação:</p>
<p>Você tem 2 datas, que precisam ser comparadas se uma é maior que outra , as datas são essas: <em>23/06/1989</em> e <em>23/08/1800</em>, e em comparações de datas você não pode usar barras, traços, essas viadagens todas pra ficar bonitinha! Seria assim seu pensamento:</p>
<p>23061989 > 23081800  vai retornar false, hahah se lasco cara!</p>
<p>Bom, olhando você ja sabe que a data mais antiga é maior que a mais nova, no nosso formato Brasileiro, mas isso esta errado, sendo que a primeira data é a maior, sendo à mais perto de nosso ano atual, não é? mas os numeros não mentem, porque nosso formato é incorreto para comparações de data, mas no formato americano é mais fácil de se comparar:</p>
<p>18002308 > 19892308 vai retornar true.</p>
<p>Mas você ficou tristinho, pois a data no formato americano fica estranho pros brasileiros, calma, tudo tem uma solução, você pode formatar a data em timestamp com uma função, ela fica em um formato agradavel de ler exemplo: <strong><em>23 de outubro de 2004 as 13:01:21</em></strong> . mas caso os dados venham do banco de dados, é necessário usar UNIX_TIMESTAMP antes no seu select, por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># Seleciona o campo data, usando a função UNIX_TIMESTAMP, dando renome a ela, de NovaData, campo esse da tabela TabelaLinda</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> UNIX_TIMESTAMP<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">DATA</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> NovaData <span style="color: #993333; font-weight: bold;">FROM</span> TabelaLinda;</pre></div></div>

<p>Se você chamar a função UNIX_TIMESTAMP sem nenhum argumento, exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># Obtem a data de hoje usando os segundos, desde de 1969!</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> UNIX_TIMESTAMP<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Isso iria retorna um tipo timestamp do Unix, são segundos desde &#8216;1969-01-01 00:00:00&#8242; GMT, mais ou menos assim: 882226357</p>
<p>Bom, ai você tem um monte de numeros de segundos, o que você vai fazer com eles? colocar no prato e comer? Jogar na lata do lixo porque não serve pra nada? Pegar uma metralhadora e atirar no monitor? Ou usa a função para formatar?, ahhh garoto esperto, usa a função!</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">function</span> montaData<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: #000088;">$v_mes</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;Janeiro&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Fevereiro&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Março&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Abril&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Maio&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Junho&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Julho&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Agosto&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Setembro&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Outubro&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Novembro&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Dezembro&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000088;">$v_data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">,</span><span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Y m d H i s&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">{$v_data[2]}</span> de {<span style="color: #006699; font-weight: bold;">$v_mes</span>[(int)<span style="color: #006699; font-weight: bold;">$v_data[1]</span>]} de <span style="color: #006699; font-weight: bold;">{$v_data[0]}</span> as <span style="color: #006699; font-weight: bold;">{$v_data[3]}</span>:<span style="color: #006699; font-weight: bold;">{$v_data[4]}</span>:<span style="color: #006699; font-weight: bold;">{$v_data[5]}</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Pronto! Basta aplicar:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">echo</span> montaData<span style="color: #009900;">&#40;</span><span style="color: #000088;">$consulta</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'NovaData'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// 23 de outubro de 2005, as 13:13:13</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Agora quando você define no seu campo tipo Timestamp? como deve inserir o formato das datas no banco? Você usa o padrão americano, temos outra função pra isso, pra em vez de se matar escrevendo date() e suas propriedades, só chama a função PadraoData().</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">function</span> padraoData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$exibe</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Y m d H i s'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$exibe</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Se você mandar imprimir date(&#8216;Y m d H i s&#8217;); vai ver que vai sair: YYYY MM DD H I S, não as letras, mas a data mesmo! que é o padrão americano, em timestamp! Em comparações isso fica mais perfeito ainda, não foge nem os segundinhos!</p>
<p>20041512030520  >  20031810122030 retorna  true<br />
&#8211;<br />
20031810122030 > 20041512030520   retorna  false</p>
<h2>Índices para Pesquisa</h2>
<ul> </p>
<li>Linguagem PHP  &#8211; <a href="http://www.php.net">http://www.php.net</a></li>
<li>Banco de dados Mysql &#8211; <a href="http://www.mysql.com">http://www.mysql.com</a></li>
</ul>
<p> </p>
<p>Abraços ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/04/07/trabalhando-com-datas-em-php-mysql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
