xTrovaox 0 Denunciar post Postado Junho 15, 2011 Eae pessoal beleza? então to querendo uma ajuda na hora de somar data e hora. O campo que está no banco é do tipo DATETIME, eu to querendo fazer tipo assim: 2010-06-17 03:07:22 + 0001-01-05 05:07:10 que vai dar 2011-07-22 08:14:32. E tambem queria fazer um IF pra ele verificar se data x é maior que a data y. se eu fazer um if assim será que ele verificar certim qual é o maior???? E uma Duvida: será que quando ele somar Data + Data, ele irá somar tipo assim: 2010-01-05 05:07:10 + 0000-00-00 05:07:50 ai o resultado teria que dar 2010-01-05 05:08:00, pois os segundos 10 + 50 dão 1 min, ai ele soma o min com o 7, e assim por diante se tiverem 60 min tem que somar mais 1 hora, e finalmente se chegar aos 24 hrs ele tem que alterar a data, tendo que somar + 1 ao dia, e assim vai. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 15, 2011 Para somar data use o TIMESTAMP SELECT DATE_FORMAT( ( TIMESTAMP( '2010-06-17 03:07:22' ) + TIMESTAMP( '0001-01-05 05:07:10' ) ) , '%Y-%m-%d %H:%i:%s' ) Usando o IF SELECT IF( '2011-06-20' > '2011-06-18', TRUE, FALSE ) Sempre que possível leia o Manual Compartilhar este post Link para o post Compartilhar em outros sites
xTrovaox 0 Denunciar post Postado Junho 21, 2011 vlw pela ajuda, mas eu mudei umas coisas e o problema é otro. O sistema de data e hora eu estou utilizando de modo diferentes agora. No momento preciso de fazer uma subtração da hora que está no banco de dados, por a hora de agora, me trazendo o valor de quanto tempo falta para que a hora de agora chegue a hora que está no banco de dados. Exp: Hora no banco de dados = 10:20:05 Hora de agora = 05:10:05 teria que dar o resultado: 05:10:00 pesquisei muuuuito e nenhum dos codigos que usei deu certo, e estava precisando isso em codigos php. pf se alguem souber será que pode me dar uma luz?? faz tempo que estou pesquisando sobre isso e não consigo achar solução. OBS: a hora de agora tem que ser o subtraendo. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 21, 2011 A classe DateTime faz isso que você quer. <?php $date_time = new DateTime( '10:20:05' ); $diff = $date_time->diff( new DateTime( '05:10:05' ) ); echo $diff->format( '%H:%i:%S' ); // 05:10:00 ?> Compartilhar este post Link para o post Compartilhar em outros sites
xTrovaox 0 Denunciar post Postado Junho 21, 2011 Carlos eu fui testar o codigo que você me passou mais ele está me voltando um erro, segue: PHP Fatal error: Call to undefined method DateTime::diff() in E:\.....\....\....\teste.php on line 5 será que o codigo está certo mesmo?? Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 21, 2011 date_diff ( PHP 5 >= 5.3.0 ) Só funciona a partir versão 5.3.0 Compartilhar este post Link para o post Compartilhar em outros sites
xTrovaox 0 Denunciar post Postado Junho 22, 2011 ixi a versão que eu uso não é essa :( Será que não tem outra solução?? Compartilhar este post Link para o post Compartilhar em outros sites
Gasparzinho 9 Denunciar post Postado Junho 22, 2011 Mão sei se era isso que tu precisas, mas até onde entendi sua dúvida esta função funciona perfeitamente!! <?php /** * Function to calculate date or time difference. * * Function to calculate date or time difference. Returns an array or * false on error. * * @author J de Silva <giddomains@gmail.com> * @copyright Copyright © 2005, J de Silva * @link [url="http://www.gidnetwork.com/b-16.html"]http://www.gidnetwork.com/b-16.html[/url] Get the date / time difference with PHP * @param string $start * @param string $end * @return array */ function get_time_difference( $start, $end ) { $uts['start'] = strtotime( $start ); $uts['end'] = strtotime( $end ); if( $uts['start']!==-1 && $uts['end']!==-1 ) { if( $uts['end'] >= $uts['start'] ) { $diff = $uts['end'] - $uts['start']; if( $days=intval((floor($diff/86400))) ) $diff = $diff % 86400; if( $hours=intval((floor($diff/3600))) ) $diff = $diff % 3600; if( $minutes=intval((floor($diff/60))) ) $diff = $diff % 60; $diff = intval( $diff ); return( array('days'=>$days, 'hours'=>$hours, 'minutes'=>$minutes, 'seconds'=>$diff) ); } else { trigger_error( "Ending date/time is earlier than the start date/time", E_USER_WARNING ); } } else { trigger_error( "Invalid date/time data detected", E_USER_WARNING ); } return( false ); } ?> <?php // a START time value $start = '09:00'; // an END time value $end = '10:30'; // what is the time difference between $end and $start? if( $diff=@get_time_difference($start, $end) ) { echo "Hours: " . sprintf( '%02d:%02d', $diff['hours'], $diff['minutes'] ); } else { echo "Hours: Error"; } ?> Créditos: http://www.gidnetwork.com/b-16.html Abraço!!! Compartilhar este post Link para o post Compartilhar em outros sites
xTrovaox 0 Denunciar post Postado Junho 22, 2011 Gasparzinho seu codigo funciona perfeitamente, mas será que não tem um jeito dele fazer uma substração tipo assim: são 01:00:00 vou subtrair por 03:00:00, ele deveria me retornar 22:00:00. Tipo ele tinha que pegar 1 hora e voltar 3 horas atrás, que dariam 22 horas. Eu tenho um codigo de soma aqui mais quando chega a certa hora ele para de funcionar. Ele soma a hora atual com mais 3 horas, mais quando chega depois das 22:00:00 hrs ele para de funcionar, pois quando pegamos 22:00 hrs com mais as 03:00 hrs, ele deveria me resultar em 01:00 hr, mais parece que o resultado limite é somente de 23:59, quando dar mais que isso ele nao funciona. Será que não tem como fazer uma soma desses modos que dão certo?? Compartilhar este post Link para o post Compartilhar em outros sites