Fechar
Artigo
A-
A
A+
A
Calculando intervalo de datas com PHP
Como realizar operações entre duas datas no php, para cálculo de intervalos e idades

/home/rs28559/public_html/web/files/foto_pagina/calculando_intervalo_de_datas_com_php_0912110908352.jpg
Operação com datas é sempre algo complicado. Nesse artigo vou mostrar uma técnica de cálculo de diferença entre duas datas com PHP. Este método de cálculo de diferença entre datas está incluído no pacote Util do Samus Framework, mas pode ser usado em qualquer contexto. 

Vamos lá. Na verdade a solução é mais simples do que parece, mas a lógica pode dar um nó na cabeça. Existe um método no php chamado”strtotime” que transforma qualquer string no formato de data (em inglês) em um timestamp válido, e para nossa felicidade o PHP consegue  realizar cálculos entre timestamp. Isso mesmo, podemos somar e subtrair datas retornadas por este método. 

Uma data é válida quando escrita corretamente no formato universal, aaaa-dd-mm hh:mm:ss; por exemplo: 2009-25-12 13:50:30 ; infelizmente, no Brasil, passamos a vida inteira utilizando a data escrita ao contrário, o que torna estranho esse formato universal (perceba que é muito mais lógico escrever a data iniciando pelo ano, assim as datas são numericamente crescentes). 

A função timestamp retorna em segundos a hora atual, com isso conseguimos realizar a operação com as datas. Depois de realizar a operação, basta transformar os segundos em dia, mês, ano ou tempo. Vamos ao método (veja que a assinatura do método é static já que ele utilizado dentro da classe util).

     /**
     * Calcula o intervalo entre duas datas no formato ISO, o intervalo é dado
     * no formato específicado em intevalor q pode ser
     * y - ano
     * m - meses
     * d - dias
     * h - horas
     * n - minutos
     * default ´se gundos
     *
     * @param string $data1
     * @param string $data2
     * @param string $intervalo m, d, h, n,y
     * @return int|string intervalo de horas
     */
    public static function dataDif($data1, $data2, $intervalo) {

        switch ($intervalo) {
            case 'y':
                $Q = 86400*365;
                break; //ano
            case 'm':
                $Q = 2592000;
                break; //mes
            case 'd':
                $Q = 86400;
                break; //dia
            case 'h':
                $Q = 3600;
                break; //hora
            case 'n':
                $Q = 60;
                break; //minuto
            default:
                $Q = 1;
                break; //segundo
        }

        return round((strtotime($data2) - strtotime($data1)) / $Q);
    }
Utilizando o método: cálculo de idades:
  $nascimento = '1987-07-06';
  var_dump(Util::dataDif(date('Y-m-d'), $nascimento, 'y'));

Utilizando o método: cálculo de intervalo de dias:
  $evento= '2010-04-24';
  var_dump(Util::dataDif(date('Y-m-d'), $evento, 'd'));

Esta é uma implementação simples desta funcionalidade do php, já que não estamos considerando anos bissextos e etc, mas é uma questão de implementação. Existem outras formas de realizar operações com datas, mas essa é uma das que mais gosto.





Triangulo
[ 28.07.10 ]
Análise do papel do PHP no mercado de TI Nacional e a abordagem do Samus Framework
Triangulo
[ 21.11.09 ]
Uma amostra de código do Samus Framework
Triangulo
[ 06.01.11 ]
A nova forma de configurar aplicações usando o Samus Framework
Triangulo
[ 01.03.10 ]
Como instalar o xDebug no XAMPP, simples e fácil
Triangulo
[ 07.01.10 ]
SQL com todas as cidades do Brasil, acentuadas e organizados por estado
Triangulo
[ 22.12.09 ]
O Netbeans 6.8 lançado dia 10/12/09 traz várias novidades para os programadores PHP


+ Artigo
[ 28.07.10 ] Aceitação PHP no Mercado e o Samus Framework - Análise do papel do PHP no mercado de TI Nacional e a abordagem do Samus Framework
[ 07.01.11 ] Otimize seu site, extensões que apontam boas práticas para seu site ficar mais rápido - Saiba como as extensões Page Speed, YSlow e o Firebug podem ajudar seu site à ficar mais rápido
[ 21.11.09 ] Començando a desenvolver com Samus Framework - Uma amostra de código do Samus Framework
[ 06.01.11 ] Samus Framework e o novo init.php - A nova forma de configurar aplicações usando o Samus Framework
[ 30.07.10 ] TinEye: pesquisa de imagens reversa - Quando você tem a imagem e quer saber de onde ela vem
[ 01.03.10 ] Instalando o xDebug no XAMPP - Como instalar o xDebug no XAMPP, simples e fácil
[ 24.02.10 ] Google Labs - Similar Images - Novas formas de busca e indexação de imagens e conteúdo do Google
[ 21.11.09 ] Criando uma URL limpa - Como criar uma URL a partir do título de uma página
[ 07.01.10 ] Todas as Cidades do Brasil Atualizado e com Acentos - SQL com todas as cidades do Brasil, acentuadas e organizados por estado
[ 22.12.09 ] Lançado o Netbeans 6.8 - O Netbeans 6.8 lançado dia 10/12/09 traz várias novidades para os programadores PHP
[ 11.12.09 ] Calculando intervalo de datas com PHP - Como realizar operações entre duas datas no php, para cálculo de intervalos e idades
[ 11.12.09 ] Qual o vídeo mais visto do Youtube? - Sempre quis saber qual o vídeo mais visto? Ou o primeiro postado? Agora você vai saber como encontrá-los facilmente.
[ 02.12.09 ] Efeito de sombra alternativo no Corel Draw - Aprenda a fazer uma sombra muito melhor do que a bugada Sombra Interativa
[ 19.11.09 ] WebStandards - Introdução - Tirado do materiao do treinamento de Webstandards, conheça um pouco mais sobre este padrão de desenvolvimento web