Você está aqui: Home / pegar parte da data com php

Pegar Parte da Data com PHP



Neste artigo vou mostrar como faço para pegar partes de uma data no PHP, uma leitura interessante também é o post que criei aqui: Trabalhando com Datas no PHP

Você já precisou pegar apenas o dia, o mês ou o ano de uma determinada data? Pois bem, quando você quer saber o dia, o mês ou o ano atual, é muito simples, você pode utilizar a função date do PHP. Veja como é simples:

  1. echo "Dia=" . date("d") . "<br>";
  2. echo "Mes=" . date("m") . "<br>";
  3. echo "Ano=" . date("Y") . "<br>";
echo "Dia=" . date("d") . "<br>";
echo "Mes=" . date("m") . "<br>";
echo "Ano=" . date("Y") . "<br>";

A função date te permite pegar partes da data atual facilmente, contudo, para outras datas, como por exemplo para uma data que está em uma variável ou uma data que está armazenada no banco de dados, a função date não irá te ajudar. Nesses casos, utilizo uma função que retorna a data no formato de um array assossiativo, veja o código abaixo:

  1. class Anderson_Makiyama_Functions{
  2.     public static function get_data_array($data,$part=){
  3.        $data_ = array();
  4.        $data_["ano"] = substr($data,0,4);
  5.        $data_["mes"] = substr($data,5,2);
  6.        $data_["dia"] = substr($data,8,2);
  7.        if(empty($part))return $data_;
  8.        return $data_[$part];
  9.     }
  10.    
  11.     public static function get_data_array_br($data,$part=){
  12.        $data_ = array();
  13.        $data_["ano"] = substr($data,6,4);
  14.        $data_["mes"] = substr($data,3,2);
  15.        $data_["dia"] = substr($data,0,2);
  16.        if(empty($part))return $data_;
  17.        return $data_[$part];
  18.     }  
  19. }
  20.  
  21. $data = "27/12/2011";
  22.  
  23. $anderson_makiyama_functions = new Anderson_Makiyama_Functions();
  24. $data_array = $anderson_makiyama_functions->get_data_array_br($data);
  25.  
  26. echo $data_array["ano"];
class Anderson_Makiyama_Functions{
	public static function get_data_array($data,$part=''){
	   $data_ = array();
	   $data_["ano"] = substr($data,0,4);
	   $data_["mes"] = substr($data,5,2);
	   $data_["dia"] = substr($data,8,2);
	   if(empty($part))return $data_;
	   return $data_[$part];
	}
	
	public static function get_data_array_br($data,$part=''){
	   $data_ = array();
	   $data_["ano"] = substr($data,6,4);
	   $data_["mes"] = substr($data,3,2);
	   $data_["dia"] = substr($data,0,2);
	   if(empty($part))return $data_;
	   return $data_[$part];
	}	
}

$data = "27/12/2011";

$anderson_makiyama_functions = new Anderson_Makiyama_Functions();
$data_array = $anderson_makiyama_functions->get_data_array_br($data);

echo $data_array["ano"];

No exemplo acima, foi sugerido a data 27/12/2011, ou seja, uma data no padrão brasileiro, assim sendo, fiz uso do método get_data_array_br, se você estiver trabalhando com uma data no formato Ano/mes/dia, utilize o outro método get_data_array. Em ambos os casos, a função irá retornar um array indexado por dia, mes e ano, com isso você pode pegar qualquer parte da data facilmente. Veja:

  1. $data = "27/12/2011";
  2. $data_array = $anderson_makiyama_functions->get_data_array_br($data);
  3.  
  4. echo "Dia= " .  $data_array["dia"] . "<br>";
  5. echo "Mes= " .  $data_array["mes"] . "<br>";
  6. echo "Ano= " .  $data_array["ano"] . "<br>";
$data = "27/12/2011";
$data_array = $anderson_makiyama_functions->get_data_array_br($data);

echo "Dia= " .  $data_array["dia"] . "<br>";
echo "Mes= " .  $data_array["mes"] . "<br>";
echo "Ano= " .  $data_array["ano"] . "<br>";

Os Métodos get_data_array e get_data_array_br também te permitem informar qual parte da data você quer, nesse caso, invés de um array como retorno, o retorno será exatamente a parte da data desejada. Para pegar somente uma parte de uma data, basta informar como segundo parâmetro ao método qual é a parte desejada, as opções são: “dia”, “mes” e “ano”. Vejo o exemplo abaixo onde obtenho apenas o mês de uma dada Data:

  1. $data = "27/12/2011";
  2.  
  3. $anderson_makiyama = new Anderson_Makiyama_Functions();
  4. $mes = $anderson_makiyama_functions->get_data_array_br($data,"mes");
  5.  
  6. echo $mes;
$data = "27/12/2011";

$anderson_makiyama = new Anderson_Makiyama_Functions();
$mes = $anderson_makiyama_functions->get_data_array_br($data,"mes");

echo $mes;

Pegar Parte da Data com PHP: Datas oriundas do Banco Mysql

Se você está trabalhando com uma data oriunda do Mysql, deverá utilizar o método get_data_array pois como bem sabemos o servidor mysql armazena as datas no formato “ano-mes-dia”. Então a idéia é selecionar a data e depois obtê-la em formato de array. Para acompanhar o exemplo a seguir, crie um banco de dados no Mysql com uma tabela chamada cadastro, nesta tabela deverá haver as seguintes colunas: nome, dt_cadastro, sendo que nome pode ser varchar (100) e dt_cadastro (DATE). O primeiro passo é inserir alguns dados nessa tabela, note que abaixo estou usando PDO, caso você não leu o artigo sobre PDO, leia-o nesse Link: PDO PHP Data Object

  1.  
  2. $tb = $conn->query("insert into cadastro values (‘Edmundo’, CURDATE())");
  3. $tb = $conn->query("insert into cadastro values (‘Maria’, CURDATE())");
 
$tb = $conn->query("insert into cadastro values ('Edmundo', CURDATE())");
$tb = $conn->query("insert into cadastro values ('Maria', CURDATE())");

Pronto, agora temos dois registros: Edmundo e Maria com a data de seus cadastros. Para quem não sabe, CURDATE é uma função nativa do Mysql que retorna a Data Atual. O próximo passo é fazer um select para obter os registros. Veja como ficaria:

  1. $anderson_makiyama_functions = new Anderson_Makiyama_Functions();
  2. $tb = $conn->query("select * from cadastro");
  3.  
  4. while($l = $tb->fetch(PDO::FETCH_ASSOC)){
  5.    
  6.     $data_array = $anderson_makiyama_functions->get_data_array($l["dt_cadastro"]); 
  7.     echo $l["nome"] . " se cadastrou no dia " . $data_array["dia"] . "<br>";
  8. }
$anderson_makiyama_functions = new Anderson_Makiyama_Functions();
$tb = $conn->query("select * from cadastro");

while($l = $tb->fetch(PDO::FETCH_ASSOC)){
	
	$data_array = $anderson_makiyama_functions->get_data_array($l["dt_cadastro"]);	
	echo $l["nome"] . " se cadastrou no dia " . $data_array["dia"] . "<br>";
}

Fácil, não?

Pegar Parte da Data com PHP: Separar data no Select

Você também pode separar a data já no select usando a função date_format do próprio mysql. Veja como ficaria:

  1. $tb = $conn->query("select c.nome, DATE_FORMAT(c.dt_cadastro, ‘%d‘) as dia, DATE_FORMAT(c.dt_cadastro, ‘%m’) as mes, DATE_FORMAT(c.dt_cadastro, ‘%Y’) as ano from cadastro c");
  2.  
  3. while($l = $tb->fetch(PDO::FETCH_ASSOC)){
  4.     echo $l["nome"] . " se cadastrou no dia " . $l["dia"] . "<br>";
  5. }
$tb = $conn->query("select c.nome, DATE_FORMAT(c.dt_cadastro, '%d') as dia, DATE_FORMAT(c.dt_cadastro, '%m') as mes, DATE_FORMAT(c.dt_cadastro, '%Y') as ano from cadastro c");

while($l = $tb->fetch(PDO::FETCH_ASSOC)){
	echo $l["nome"] . " se cadastrou no dia " . $l["dia"] . "<br>";
}

O código acima irá imprimir na tela o seguinte:

  1. Edmundo se cadastrou no dia 27
  2. Maria se cadastrou no dia 27
Edmundo se cadastrou no dia 27
Maria se cadastrou no dia 27

Para finalizar, você também pode invocar o método get_data_array sem instanciar um objeto. Note que no exemplo abaixo usei a função call_user_func para evitar o erro t_paamayim_nekudotayim, caso você esteja trabalhando com PHP 5.3 ou superior, poderá usar a sintaxe: Anderson_Makiyama_Functions::get_data_array.

  1. $data = "2011-12-27";
  2.  
  3. echo "<pre>";
  4. print_r(call_user_func(array(‘Anderson_Makiyama_Functions’, ‘get_data_array’), $data));
  5. echo "</pre>";
$data = "2011-12-27";

echo "<pre>";
print_r(call_user_func(array('Anderson_Makiyama_Functions', 'get_data_array'), $data));
echo "</pre>";

Pegar Parte da Data com PHP: Conclusão

Como pode ser visto, existem várias formas para se obter apenas partes de uma data, você deve escolher dentre elas aquela que seja mais simples para você. Neste artigo sugerí a criação de uma classe com dois métodos, um para datas no formato brasileiro (d/m/ano) e outra para datas no formato do Mysql (Ano-mes-dia), então basta invocar o método adequado conforme o tipo de data que se deseja trabalhar.

Fica aí a dica. Até o próximo artigo aqui no Profissionais Web


Uma resposta a Pegar Parte da Data com PHP

Página 1 de 11
  • Celso Furtado

    Beleza!! mas eu utilizo a seguinte forma:

    $data = “1975-11-08″;
    $dia = date(“d”, strtotime($data));
    $mes = date(“m”, strtotime($data));
    $ano = date(“Y”, strtotime($data));
    echo “Data= ” . $data . ” -Dia=” . $dia . ” -Mês= ” . $mes . ” -Ano= ” . $ano;

    13/09Responder
Página 1 de 11

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" extra="">

Quem sou Eu? Bem, meu nome é Anderson Makiyama, moro em Joinville SC com minha esposa e meus dois filhos amados. Já trabalho APENAS pela internet há mais de 10 anos.

Mais Detalhes sobre Mim
FIQUE ATUALIZADO
Cadastre seu email Aqui
para Receber Gratuitamente
as atualizações do Blog