segunda-feira, 10 de março de 2008

jQuery - Calcula Idade

Esta função foi feita com o intuito de aprender a criar plugins para a excelente biblioca que utilizo já faz algum tempo, o jQuery. Depois de quebrar muito a cabeça para entender o funcionamento - quebrar a cabeça pois no dia estava sem acesso internet para ler a documentação, entao minha fonte de referência foram as bibliotecas de terceiros e o proprio jQuery como base de estudo. Bem valeu à pena o esforço, não está 100% maravilhosa, mas ja me serviu como ponta pé incial para transformar minhas bibliotecas javascript em componentes jQuery.


/**
* jQuery CalculaIdade v1.0.0 - http://wborbajr.blogspot.com/jquery.CalculaIdade.php
*
* Copyright (c) 2008 Waldir Borba Junior (stilbuero.de)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Usando calculaIdade().
*
* @exemplo
*
* $('#campos_formulario').val( $().calculaIdade( "dd/mm/yyyy" ) );
*
* $('#campos_formulario').val( $().calculaIdade( "dd/mm/yy" ) );
*
* @desc Calcula a idade de uma data informada e retorno no formato 99 a 99 m -
* #ERR# - se a data informada nao estiver correta
*
*/

$.fn.calculaIdade = function ( dataNascimento ) {
var hoje = new Date();

var arrayData = dataNascimento.split("/");

var retorno = "#ERR#";

if (arrayData.length == 3) {
// Decompoem a data em array
var ano = parseInt( arrayData[2] );
var mes = parseInt( arrayData[1] );
var dia = parseInt( arrayData[0] );

// Valida a data informada
if ( arrayData[0] > 31 || arrayData[1] > 12 ) {
return retorno;
}

ano = ( ano.length == 2 ) ? ano += 1900 : ano;

// Subtrai os anos das duas datas
var idade = ( hoje.getYear()+1900 ) - ano;

// Subtrai os meses das duas datas
var meses = ( hoje.getMonth() + 1 ) - mes;

// Se meses for menor que 0 entao nao cumpriu anos. Se for maior sim ja cumpriu
idade = ( meses < 0 ) ? idade - 1 : idade;

meses = ( meses < 0 ) ? meses + 12 : meses;

retorno = ( idade + " a " + meses + " m" );
}

return retorno;
};

2 comentários:

Unknown disse...

no IE tava bugando, troquei a seguinte linha e funcionou:

var idade = ( hoje.getYear()+1900 ) - ano;

POR

var idade = ( hoje.getFullYear() ) - ano;


Abss!

Unknown disse...

Boa tarde amigo. Como posso implementar este cálculo onde num campo de data de Nascimento ao usuário clicar no calendário e digitar ele exiba a idade num textfield. Acredito que seja através do evento onBlur() no input data de nascimento, mais como faço?

Fale Comigo

Bookmark