Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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.
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
?>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??
date_diff ( PHP 5 >= 5.3.0 )
Só funciona a partir versão 5.3.0
ixi a versão que eu uso não é essa :(
Será que não tem outra solução??
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 );
}
} trigger_error( "Invalid date/time data detected", E_USER_WARNING );
}
return( false );
}
?>
<?php// 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'] );
} echo "Hours: Error";
}
?>
Créditos: http://www.gidnetwork.com/b-16.html
Abraço!!!
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??
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