Usando a função strtotime para manipular datas
Na minha cabeça a essa altura só me restava uma reflexão sobre a performance desta função em relação a outras soluções. Por isso primeiro fiz um benchmark eu mesmo e o resultado foi este:
Código:
PHP:
Executando 100 vezes
Benchmark função: 0.000267641544342
Benchmark strtotime(): 0.000428168773651
Confesso que não era o que eu esperava, uma diferença de 0.0002 a mais em relação a uma função "custom", por isso fui procurar algo fora do lugar. Me dei conta que partindo da data acima é necessário rodar a função strtotime duas vezes, por isso decidi repetir o teste com um timestamp no lugar da data. Desta vez ficou clara a performance melhor da função strtotime(), pois para transformar o timestamp no formato usado pela função temos que executar a função date primeiro.
Usando Data textual
Executando 100 vezes
Benchmark função: 0.000275664329529
Benchmark strtotime(): 0.000425822734833
Usando timestamp
Executando 100 vezes
Benchmark função: 0.000400955677032
Benchmark strtotime(): 0.000323491096497
Código do benchmark: http://www.rafaeldohms.com.br/myprojects/codeexamples/bench_strtotime.phps
Runtime do benchmark: http://www.rafaeldohms.com.br/myprojects/codeexamples/bench_strtotime.php
Bem, mesmo com a performance mais baixa no caso da data textual, que se deve ao processo de parse da string, a facilidade no uso da função é claramente superior, simplificando o código e diminuindo o numero de linhas de código.
Fica entao para vocês a decisão, simplicidade e flexibilidade ou formato engessado e performance?
Artigo publicado pela primeira vez em: http://www.rafaeldohms.com.br/2006/08/03/strtotime-pode-ajudar/pt/
Código:
PHP:
<?php //Com função $dataInicial = "01/08/2006 08:04:20"; date("d/m/Y H:i:s", dateAdd($dataInicial, +15, "dia")); //Com strtotime $dataInicial = "01/08/2006 08:04:20"; date("d/m/Y H:i:s", strtotime("+15 day",strtotime($dataInicial))); ?>
Executando 100 vezes
Benchmark função: 0.000267641544342
Benchmark strtotime(): 0.000428168773651
Confesso que não era o que eu esperava, uma diferença de 0.0002 a mais em relação a uma função "custom", por isso fui procurar algo fora do lugar. Me dei conta que partindo da data acima é necessário rodar a função strtotime duas vezes, por isso decidi repetir o teste com um timestamp no lugar da data. Desta vez ficou clara a performance melhor da função strtotime(), pois para transformar o timestamp no formato usado pela função temos que executar a função date primeiro.
Usando Data textual
Executando 100 vezes
Benchmark função: 0.000275664329529
Benchmark strtotime(): 0.000425822734833
Usando timestamp
Executando 100 vezes
Benchmark função: 0.000400955677032
Benchmark strtotime(): 0.000323491096497
Código do benchmark: http://www.rafaeldohms.com.br/myprojects/codeexamples/bench_strtotime.phps
Runtime do benchmark: http://www.rafaeldohms.com.br/myprojects/codeexamples/bench_strtotime.php
Bem, mesmo com a performance mais baixa no caso da data textual, que se deve ao processo de parse da string, a facilidade no uso da função é claramente superior, simplificando o código e diminuindo o numero de linhas de código.
Fica entao para vocês a decisão, simplicidade e flexibilidade ou formato engessado e performance?
Artigo publicado pela primeira vez em: http://www.rafaeldohms.com.br/2006/08/03/strtotime-pode-ajudar/pt/
Ótimo artigo...
13/06/2007 12:12am
(~17 anos atrás)
Para fazer a comparação da performance, vc usou a função dateAdd . Qual é o código dessa função?
21/05/2007 10:44am
(~17 anos atrás)
Mano, tô usando a "strtotime" para capturar o mês númerico de uma variável e tranformá-lo em NOME DO MÊS, só que só vem em inglês. Tem versão português pra essa função?
14/05/2007 4:10pm
(~17 anos atrás)
Bem elegante a solução para a conversão de datas, gostei e vou passar a usa-la! Parabens!
19/03/2007 11:42am
(~18 anos atrás)