Ir para conteúdo

POWERED BY:

Arquivado

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

xTrovaox

[Resolvido] Calcular Diferença entre Campos Datetime

Recommended Posts

Pessoal estou precisando de uma ajuda aqui.

Como faço para calcular a diferente entre 2 datas do tipo DateTime??

 

Exemplo:

 

$DataFuturo = "2011-03-02 20:30:15";

$DataAtual = "2011-01-02 20:30:15"; (ou "2011-03-02 20:10:15")

 

Ele teria que me retonar a $DataFuturo como maior, pois o mês da $DataAtual é menor que o mês da $DataFuturo.

 

Ou me voltar a $DataFuturo como maior, pois mesmo a data sendo a mesma, a $DataAtual tem sua hora menor que a da $DataFuturo. (isso foi na segundo valor da $DataAtual)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a classe DateTime, veja:

<?php

$DataFuturo = "2011-03-02 20:30:15";
$DataAtual = "2011-03-02 20:10:15";

$date_time  = new DateTime( $DataAtual );
$diff       = $date_time->diff( new DateTime( $DataFuturo ) );
echo $diff->format( '%y year(s), %m month(s), %d day(s), %H hour(s), %i minute(s) and %s second(s)' ); 

// 0 year(s), 0 month(s), 0 day(s), 00 hour(s), 20 minute(s) and 0 second(s)
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos eu tentei usar essa função, mas aqui não da certo, pois a versão do php que uso não suporta.

 

Será que não tem como fazer esse calculo e uma forma que funcione??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se seria o mais correto, mas eu sempre (sempre = SEMPRE) trabalho com datas no formato TimeStamp, principalmente nas consultas ao banco de dados. Isso facilita enormemente qualquer conta entre elas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, na conta ele vai ter que puxar uma data (datetime) do banco de dados, e ver qual é maior, se é a de agora ou a do banco de dados.

 

Banco de dados: MySql

 

eae gente será que tem alguma solução??? é possivel fazer esse calculo entre data e hora em um só campo datetime??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, você quer usar a data mais longa entre elas, certo? Se for isto, você pode usar direto no SELECT (quase como o Carlos Coelho sugeriu).

 

SELECT IF(data_atual > data_futuro, data_atual, data_futuro) AS data_maior FROM tabela

 

Onde data_futuro e data_atual são os campos da tabela que você quer comparar. Neste caso, data_maior será o campo que tiver o maior valor entre eles e que será retornado da consulta.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro, você faz o fetch na data que você quer .. então faz o mesmo tipo de comparação.

Mais eu não vejo o porque, sendo que na SQL mesmo você soluciona, então já faz um fetch só com o resultado final

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo vai funcionar dessa forma:

 

O usuario entra na pagina, no momento que ele entrou ja envia um INSERT pro banco de dados, ele envia a data atual + 7 horas ($DataLiberar).

 

Quando o usuario entrar novamente naquela pagina, ela verifica se a data(hora) atual é maior que a $DataLiberar, se for maior quer dizer que ja passou as 7 horas, então o cara pode entrar na pagina, caso a data atual for menor que a $DataLiberar, quer dizer que ainda não se passaram as 7 horas, então ele não pode acessar a pagina ainda.

 

Mas é claro vao ser varios usuarios, na verificação ele vai verificar onde o ID do usuario logado é igual ao do IDusuario na tabela onde é inserido a $DataLiberar.

 

Mas ja fiz tudo, só falta fazer este calculo de datetime, descobrir se é maior ou não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então o problema é que sou leigo em php e ainda estou estudando, sei fazer apenas algumas coisas.

 

Sobre fazer esse esquema utilizar direto no sql, eu não sei como fazer, sei que tem como digitar comando direto no sql, mais como fazer esse? ou é so copiar o camando e colocar no sql e executar?? como ele vai me retornar ??

será que tem como me explicar fazendo um grande favor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal achei um código que parece que resolveu meu problema, vejam:

 

<?php
$date1 = new DateTime('2009-10-10 20:09:00');  
$date2 = new DateTime('2009-11-10 20:11:00');  
if ($date1 > $date2) {   
   echo"Data 1 é maior que Data 2";
} else {
echo"Data 2 é maior que Data 1";
}
?>

 

 

E isso mesmo ne?? testei aqui e funcionou certinho.

Obrigado pela ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta solução foi dada 3 dias atrás, mas você disse que não servia porque você disse que o seu host não suporte DateTime.

 

Ainda acho que a melhor opção é fazer direto pelo SQL. Pelo que entendi, você quer fazer um validação para não permitir que ele entre. Então, o ideal é fazer isto na mesma consulta do login.

 

Poste o código onde você faz a autenticação do usuário, para verificar se o usuário e a senha estão corretos.

 

Carlos Eduardo

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.