• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gonçalo_ssb

[PHP] Tutorial de Cálculo de Idade

4 mensagens neste tópico

Bom dia Pessoal,

Venho pela 2ª vez publicar um pequeno tutorial, que tem como objectivo o esclarecimento de dúvidas simples e que por vezes se tornam complexas para os programadores mais "verdes".

Este tutorial aborda o tema das datas mais especificamente, o cálculo da idade através da data de nascimento e a data actual.

<?php
/*
Autor: Gonçalo da Costa Ferraria
Versão: v1.0
Data:  16 de Outubro de 2008
Nome: FormatarDatas
*/
/*
------------------------------------------------------------------------------------------------------------
Nome da função:  difTiposDatas
Descrição:  Função que retorna a data actual em diferentes formatos
Parametros de entrada: Não tem
Parametros de saida: $data7(Variavél)  -- Data no formato escolhido
*/
function difTiposDatas()
{
$data_hora = date("j F , Y, g:i a");            // 16 Outubro 2008, 10:16 pm
$data1 = date("m.d.y");                         // 16.03.08
$data2 = date("j, n, Y");                       // 16, 10, 2008
$data3 = date("Ymd");                           // 20081016
$data4 = date('h-i-s, j-m-y, it is w Day z ');  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$dia_desc = date('\i\t \i\s \t\h\e jS \d\a\y.');// It is the 16th day.
$data5 = date("D M j G:i:s T Y");               // Qui Out 16 10:16:08 MST 2008
$hora = date("H:i:s");                          // 10:16:17
$data6 = date("Y/d/m");							// 2008/16/10
$data7 = date("d/m/Y");							// 16/10/2008

//Aqui retorna o tipo de data que pretende obter como tal deve mudar o nome da variavél que pretende retornar
return $data7;
}

/*
------------------------------------------------------------------------------------------------------------
Nome da função: getIdade
Descrição:  Função que retorna a idade a partir da data de nascimento e data actual
Parametros de entrada: $data -- Data de nascimento
Parametros de saida: $dif_anos -- Idade (em anos)
*/
function getIdade($data)
{
	// Devolve a data atual no formato (dd/mm/yy)
	$data_actual = date("d/m/Y");

	//Separa a string de data_actual através da função substr em dia, mês e ano da data
	$dia_actual = substr($data_actual,0,2); //Variavél que guarda o dia actual (2 primeiros caracteres)
	$mes_actual = substr($data_actual,3,2); //Variavél que guarda o mês actual (4º e 5º caracter)
	$ano_actual = substr($data_actual,6,4); // Variavél que gurada o ano actual (2 ultimos caracteres)

	//Separa a string de data_nasc através da função substr em dia, mês e ano da data
	$dia_nasc = substr($data,0,2); // Variavél que guarda o dia de nascimento (2 primeiros caracteres)
	$mes_nasc = substr($data,3,2); //Variavél que guarda o mes de nascimento (4º e 5º caracter)
	$ano_nasc = substr($data,6,4); //Variavél que guarda o ano de nascimento (2 ultimos caracteres)

	//Verifica a diferença entre os anos
	$dif_anos = $ano_actual - $ano_nasc;

	//Vai verificar se o mes actual é inferior ao mês de nascimento de modo a verificar se este ano já efectuou anos
	if($mes_actual<$mes_nasc)//Caso seja inferior significa que  o  ainda não fez anos no ano corrente
	{
		$dif_anos--;//Diminuição de um ano
	}
	else if($mes_actual==$mes_nasc) //Caso onde o mês actual é o mesmo do que a data actual
	{
		//Como tal temos que recorrer á verificação dos dias de modo a saber se já efectou anos no ano corrente
		if($dia_actual<$dia_nasc)//Caso o dia actual seja inferior á dia de nascimento então significa que ainda não fez anos
		{
			$dif_anos--;//Diminuição de um ano
		}
	}

	//Retorna a idade do socio
	return $dif_anos;		
}
?>

Qualquer dúvida ou correcções estão á vontade como sempre.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha, umas sugestões:

* Na função difTiposDatas, podes por um array com as opções de datas, em vez de ocupar memória e processador, quando o utilizador apenas quer uma forma, algo assim:

$datas = array("j F , Y, g:i a", "j, n, Y", ...)
$escolha = 1;       //posição do array, neste caso "j, n, Y"
return date($datas[$escolha])

* No getIdade, podes obter o dia, mes e ano num array

$data = split("/", date("d/m/Y"))
//$data[0] = 16   $data[1] = 10   $data[2] = 2008

E acho que já ia uma classe, quando tiveres mais algumas funções. :P Não testei as funções.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a trabalhar na classe, estou a desenvolver e a pesquisar mais algumas funções depois coloco aqui. :ipool:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

function convertAge($date) {
list($year, $month, $day) = explode('-', $date);

   $year_diff  = date('Y') - $year;
   $month_diff = date('m') - $month;
   $day_diff   = date('d') - $day;

if ($month_diff < 0) {
$year_diff--;
} elseif (($month_diff == 0) && ($day_diff < 0)) {
$year_diff--;
};

   return $year_diff;
};

Editado por cra2sh
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora