Rosye 0 Denunciar post Postado Julho 14, 2004 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
rockbilly 0 Denunciar post Postado Julho 14, 2004 você tem que baixar esta biblioteca para sanar essa limitação do SO, va em: http://phplens.com/lens/dl/adodb-time.zip depois é so você incluir esse arquivo e substituir o mktime e date por adodb_mktime e adodb_date respectivamente, q deve resolver seu problema! Compartilhar este post Link para o post Compartilhar em outros sites
Rosye 0 Denunciar post Postado Julho 14, 2004 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
rockbilly 0 Denunciar post Postado Julho 14, 2004 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
Rosye 0 Denunciar post Postado Julho 14, 2004 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
Rosye 0 Denunciar post Postado Julho 14, 2004 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
rockbilly 0 Denunciar post Postado Julho 14, 2004 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
Rosye 0 Denunciar post Postado Julho 14, 2004 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
Rosye 0 Denunciar post Postado Julho 14, 2004 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