Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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);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);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?
A sim , a função date tb nao funciona, você saberia me dizer entao ql a função usar?
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
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.
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 ;)
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?
Troque o tipo deste campo de DATE para INT (10 casas basta).
E ao inserir usando INSERT na query, use a função UNIX_TIMESTAMP().
[]'s :D
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!
A forma correta seria assim:
INSERT INTO tempo (hora) VALUES (UNIX_TIMESTAMP())
[]'s
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?
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
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?
De acordo com a data completa. Dia, mês, ano, hora, minuto e segundo. :D
Valeu Paulo André..
Abraço!
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.
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
Valeu. tinha pesquisado e achado aqui , é isso mesmo..
O resultado desta subtração é em segundos. ;)
Sendo assim, usar a função gmdate() não funciona.
[]'s