Ir para conteúdo

POWERED BY:

Arquivado

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

Ygornet

Trabalhando com data e hora

Recommended Posts

Pessoal , estou com uma duvida, preciso de ajuda:

 

tenho o seguinte código:

<?
$data_inicial = mktime(13, 23, 16, 11, 09, 2007);
$data_final = mktime(15, 23, 16, 11, 09, 2007);
$diferenca = $data_final - $data_inicial;
echo "A diferença em horas entre as duas datas é: " . gmdate("H:i:s", $diferenca);

RESP: A diferença em horas entre as duas datas é: 02:00:00

 

Mas se eu alterar a data em um dia , me retorna a diferença só em horas, ex:

 

<?
$data_inicial = mktime(13, 23, 16, 11, 09, 2007);
$data_final = mktime(15, 23, 16, 11, 10, 2007);
$diferenca = $data_final - $data_inicial;
echo "A diferença em horas entre as duas datas é: " . gmdate("H:i:s", $diferenca);

RESP: A diferença em horas entre as duas datas é: 02:00:00

 

Ao invés de:

 

RESP: A diferença em horas entre as duas datas é: 26:00:00

 

Alguém poderia me ajudar a colocar a diferença tb pela data?

Compartilhar este post


Link para o post
Compartilhar em outros sites

date() e nenhuma outra semelhante funciona pois o segundo parâmetro precisa ser uma data no formato UNIX timestamp.

 

Tendo estes segundo, você precisa fazer um cálculo que de alguma forma chegue ao número de horas. ;)

 

Se 3600 segundos é 1 hora, o cálculo daqui pra frente é fácil.

 

Só teria que fazer algo mais complexo caso vá retornar também em minutos e segundos. :huh:

 

[]'s :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom , Frenesi , isso vai ser bastante trabalhoso , entao antes de iniciar , eu vou te passar a ideia do que eu quero fazer, pq derrepente você me exclarece uma forma mais facil de desenvolver oq eu quero.

 

Preciso pegar uma hora que é cadastrada no BD e verificar se já se passaram 5 minutos daquela hora cadastrada no banco. Ex:

 

No banco está:

 

12:00:00

 

vamos supor que 12:03:34 , eu de o comando para verificar se passaram os 5 min. Se sim, executa uma tarefa , se nao, executa outra.

 

Será q tem uma forma mais facil de fazer isso , sem ter que desenvolver esse trabalhão todo?

Derrepente eh coias facil e eu nao estou enxergando uma ideia mais simples.

 

Aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você consegue guardar neste campo um formato UNIX timestamp? :)

 

Se conseguir você pode fazer uma consulta direto na query SQL dessa forma:

SELECT * FROM tabela WHERE hora < (UNIX_TIMESTAMP() - 300)

Ou seja, estou selecionando todos os registros onde o valor do campo hora é menor que a data atual menos 300 segundos (5 minutos). Com isto você chega no resultado esperado.

 

Deu pra entender?

 

[]'s ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Paulo André,

 

Nao estou conseguindo salvar a data no BD no formato UNIX TIMESTAMP.

 

Seria até valida essa ideia , mas só consigo inserir no fomato TIMESTAMP, ou seja: yyyy/mm/dd h:i:s.

 

Nao esta dando certo certo , eu creio que seja por que o formato esta errado. como eu insiro a data no BD no formato UNIX TIMESTAMP?

Compartilhar este post


Link para o post
Compartilhar em outros sites

NUM TAH DANDO Nao , parece que nao aceita essa função..

o código:

<?php
$var = date("dmyHis");

include "conexao.php";

$sql = "INSERT INTO tempo (hora) VALUES ('UNIX_TIMESTAMP($var)')";
$query = mysql_query($sql) or die ("Erro.");
?>

Me retorna:

Erro.

 

A tabela no banco ja coloquei como INT , BIGINT (15), mas nao entra no banco, ja tentei ateh VARCHAR(20) e nada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza Paulo André , deu certinho, mas aí vem a dúvida.

Eu estou verificando esses -300 segundos de acordo com a data tb?

 

Exemplo:

 

Se a data/hora do banco é registrada: 12/11/2007 16:00:00 e for verificada com a data/hora 12/11/2007 16:10:00, vai ser constatado que se passaram os 5 minutos.

 

Mas e se for a seguinte situação: data/hora do banco - 12/11/2007 16:00:00 e data/hora verificada 13/11/2007 16:00:00, será que vai ser retornado que se passaram 5 minutos? ou seja , sera que vai ser constatado que se passaram 24h? ou só será verificado o horario e desconsiderado a data?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A consulta faz nada mais nada menos do que retornar todos aqueles que tem mais de 5 minutos.

 

Tendo estes resultados, basta tratar o timestamp deste campo para que exiba o tempo.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, isso eu fiz , jah tratei o timestamp e me jah etorno a data formatada como eu quero , mas a duvida eh se essa função volta os qeu tenham mais de 5 minutos , só de acordo com a hora ou com a data tb? Se a data comparada for a data do dia seguinte porem com a mesma hora , sera constatado que se passaram 24h independente se retorne em horas ou em segundos.. ?

 

A pergunta seria:

 

Se eu registro uma data agora neste momento. amanha enste mesmo horario faço uma verificação , vai ser constatado que se passaram 5 minutos , ou seja que se passaram 24h?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Paulo André,

Surgiu mais uma duvida , a função UNIX_TIMESTAMP nao pode ser utilizada em comando UPDATE?

Tentei aqui mas nao esta dando certo como no insert..

 

mysql_query("UPDATE `tabela` SET `CAMPO5` = 'UNIX_TIMESTAMP()' WHERE CAMPO4='$VAR'");

Se eu insiro qq outro numero ele aceita..

 

Na tabela o campo foi criado como INT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque desta forma você está tentando inserir UNIX_TIMESTAMP() literalmente.

 

Precisa estar sem os apóstrofos:

 

UPDATE `tabela` SET `CAMPO5` = UNIX_TIMESTAMP() WHERE CAMPO4='$VAR'

[]'s

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.