Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rosye

Mktime???

Recommended Posts

Oi, pessoal!

 

Estou novamente com dúvidas a respeito do cálculo de datas. Tenho a seguinte função que calcula a idade de usuários a partir de sua data de nascimento, que está gravada em um banco de dados, no formato YYYY-mm-dd:

 

PHP [/tr][tr]

$idade = implode('/',array_reverse(split('[-]',$idade)));

 

function calculaDia($iMes, $iDia, $iAno) {

$iTimeStamp = (mktime(0,0,0) - 86400) - mktime(0, 0, 0, $iMes, $iDia, $iAno);

$iDias = $iTimeStamp / 86400;

$iAnos = floor($iDias);

$iAnos = $iAnos / 365;

return intval($iAnos);

}

$data=$idade;

$ndata=explode("/",$data);

$idade2 = calculaDia($ndata[1],$ndata[0],$ndata[2]);

[/tr]

 

Acontece que eu notei que ela não funciona para datas de nascimento abaixo de 1970. Por exemplo, um usuário nascido em 1978, aparece normalmente com 26 anos. Já um usuário nascido em 1945 aparece com 34 anos (2004-1970) e uma mensagem mktime(): Windows does not support negative values for this function.

 

Pesquisei no php.net e descobri que a função mktime tem essa limitação. E agora? O site sugere usar uma função adodb_mktime(), mas eu não entendi direito como devo implementá-la. Alguém pode me ajudar?? :blink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, Rockbilly!

 

Criei uma include para esse arquivo e apareceram as seguintes mensagens:

 

Warning: Missing argument 4 for adodb_mktime() in E:\Home Pages\membros\adodb-time.inc on line 866

 

Warning: Missing argument 5 for adodb_mktime() in E:\Home Pages\membros\adodb-time.inc on line 866

 

Warning: Missing argument 6 for adodb_mktime() in E:\Home Pages\membros\adodb-time.inc on line 866

 

Além disso, ele está calculando a data com 5 anos a menos... quem nasceu em 1978 aparece com 21 anos, e quem nasceu em 1945 aparece com 54...

 

Mais alguma idéia? :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Intão, dá um include ou melhor, require_once("adodb-time.inc.php");

aqui vai de boa, analisa por ai:

PHP [/tr][tr]

$data = adodb_mktime(0,0,0,05,12,1958);

$a = $data;

$t = adodb_date("d/m/Y", $a);

echo "timestamp: $t<br>";

echo $data;

[/tr]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua dando o mesmo erro, não sei se é problema da função que eu estou usando...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém tem mais alguma idéia?? Outro código que eu possa usar, ou o porque desse adodb não estar funcionando?? :( []s!Rosana

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho, aqui eu testo desta maneira:

PHP [/tr][tr]

require_once("adodb-time.inc.php");

 

$data = adodb_mktime(0,0,0,05,12,1958);

$a = $data;

$t = adodb_date("d/m/Y", $a);

echo "timestamp: $t<br>";

echo $data;

[/tr]

 

tá assim o seu, coloca o pedaço do código aí....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, testando aqui, o seu código retorna:timestamp: 12/05/1958-367362000Isso tá certo? O que eu faço com isso??[]s!Rosana

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui! Segue o código:

 

PHP [/tr][tr]require_once("adodb-time.inc.php");

 

$idade = implode('/',array_reverse(split('[-]',$idade)));

 

$data = $idade;

$new = explode("/",$data);

$new[0]; //d

$new[1]; //m

$new[2]; //Y

$nowdate = adodb_mktime(0,0,0,date("m"),date("d"),date("Y"));

$birthday = adodb_mktime(0,0,0,"$new[1]","$new[0]","$new[2]");

$age=intval(($nowdate-$birthday)/(60*60*24*365));

[/tr]

 

;)

 

[]s!

 

Rosana

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.