Ir para conteúdo

POWERED BY:

Arquivado

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

xTrovaox

Como Somar Data e Hora

Recommended Posts

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

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

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

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

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

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

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

×

Informação importante

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