Diferença De Datas
#1
Posted 09/03/2006, 11:43
Tenho no meu db uma data futura (datetime), 2009-10-09 00:00:00 por exemplo.
Como faço pra calcular a diferença de dias entre hoje (NOW()) e esta data?
tentei usar timestamp unix mas esse cocô zera em 1900 às 21 horas...
dá uma luz aew por favor
http://www.guilardi.com.br
- portifólio
http://www.deusehmais.com.br
- projeto atual
#2
Posted 09/03/2006, 11:53
CAST(((UNIX_TIMESTAMP(data) - UNIX_TIMESTAMP(NOW())) / 84600) AS SIGNED)
Também tem a função:
DATEDIFF() retorna o número de dias entre a data inicial expr e a data final expr2. expr e expr2 são expressões de datas ou data e hora. Apenas a parte da data dos valores sã usados no cálculo
Se estiver usando MySQL.
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29
#3
Posted 09/03/2006, 14:48
$DataBase->DoQuery("SELECT Oss.Id , Oss.AnexCliente , Oss.AnexRespAgencia , Oss.DataIn , Oss.DataOut , Oss.Servico , MAX(Estagio.Id) As EstagioID , Estagio.Nome AS EstagioNome , Cliente.Id AS ClienteID , Cliente.Empresa AS ClienteEmpresa , Respons.Id AS ResponsID , Respons.Apelido AS ResponsApelido , ResEsta.Id AS ResEstaID , ResEsta.Apelido AS ResEstaApelido FROM OS_oss AS Oss , OS_estagios AS Estagio , usuarios AS Cliente , usuarios AS Respons , usuarios AS ResEsta WHERE Oss.AnexCliente = Cliente.Id AND Oss.AnexRespAgencia = Respons.Id AND Estagio.AnexOss = Oss.Id AND Estagio.AnexUsuario = ResEsta.Id GROUP BY Oss.Id");
ta vendo o "Oss.DataOut"???? isso é o datetime, quero apenas que imprima assim:
"faltam 3 dias e 2 horas", onde isto é calculado a partir de hoje até DataOut.
... não entendi as aplicações práticas do CAST pra fazer isso que eu quero...
http://www.guilardi.com.br
- portifólio
http://www.deusehmais.com.br
- projeto atual
#4
Posted 09/03/2006, 23:15
nossa, chega to com vergonha de perguntar uma coisa que deve ser tão fácil...
Você exagera tanto hein!
Bom, se o MySQL que você está usando nos ajudar, poderá ser feito assim:
DATE_DIFF(Oss.DataOut, NOW()) AS data_diff, CEILING(((HOUR(Oss.DataOut) * 3600) - (HOUR(NOW()) * 3600)) / 3600) AS hora_diff
data_diff -> Diferença entre as datas. (Da tabela - Dia corrente)
hora_diff -> Horas que faltam.
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29
#5
Posted 14/03/2006, 15:35
minha query ficou assim:
SELECT Oss.Id , Oss.AnexCliente , Oss.AnexRespAgencia , Oss.DataIn , Oss.DataOut , Oss.Servico , DATEDIFF(Oss.DataOut, NOW()) AS data_diff, CEILING(((HOUR(Oss.DataOut) * 3600) - (HOUR(NOW()) * 3600)) / 3600) AS hora_diff, MAX(Estagio.Id) As EstagioId , Estagio.Nome AS EstagioNome , Cliente.Id AS ClienteID , Cliente.Empresa AS ClienteEmpresa , Respons.Id AS ResponsID , Respons.Apelido AS ResponsApelido , ResEsta.Id AS ResEstaID , ResEsta.Apelido AS ResEstaApelido FROM OS_oss AS Oss , OS_estagios AS Estagio , usuarios AS Cliente , usuarios AS Respons , usuarios AS ResEsta WHERE Oss.AnexCliente = Cliente.Id AND Oss.AnexRespAgencia = Respons.Id AND Estagio.AnexOss = Oss.Id AND Estagio.AnexUsuario = ResEsta.Id AND Estagio.Nome <> 'FINALIZADO' GROUP BY Oss.Id
mas ainda tenho uma duvida nesta parte:
MAX(Estagio.Id) As EstagioId , Estagio.Nome AS EstagioNome ,
Eu "pego" o maior id do estágio. OK.
Mas não vem o "nome" vinculado a este id. por exemplo, eu pego os campos 3 | blabla, mas 'blabla' está na linha do id 1, não do id 3.
deu pra entender?
http://www.guilardi.com.br
- portifólio
http://www.deusehmais.com.br
- projeto atual
#6
Posted 14/03/2006, 17:15
como seria esta contagem regressiva!!??olha so...
minha query ficou assim:SELECT Oss.Id , Oss.AnexCliente , Oss.AnexRespAgencia , Oss.DataIn , Oss.DataOut , Oss.Servico , DATEDIFF(Oss.DataOut, NOW()) AS data_diff, CEILING(((HOUR(Oss.DataOut) * 3600) - (HOUR(NOW()) * 3600)) / 3600) AS hora_diff, MAX(Estagio.Id) As EstagioId , Estagio.Nome AS EstagioNome , Cliente.Id AS ClienteID , Cliente.Empresa AS ClienteEmpresa , Respons.Id AS ResponsID , Respons.Apelido AS ResponsApelido , ResEsta.Id AS ResEstaID , ResEsta.Apelido AS ResEstaApelido FROM OS_oss AS Oss , OS_estagios AS Estagio , usuarios AS Cliente , usuarios AS Respons , usuarios AS ResEsta WHERE Oss.AnexCliente = Cliente.Id AND Oss.AnexRespAgencia = Respons.Id AND Estagio.AnexOss = Oss.Id AND Estagio.AnexUsuario = ResEsta.Id AND Estagio.Nome <> 'FINALIZADO' GROUP BY Oss.Id
mas ainda tenho uma duvida nesta parte:MAX(Estagio.Id) As EstagioId , Estagio.Nome AS EstagioNome ,
Eu "pego" o maior id do estágio. OK.
Mas não vem o "nome" vinculado a este id. por exemplo, eu pego os campos 3 | blabla, mas 'blabla' está na linha do id 1, não do id 3.
deu pra entender?
é o mesmo q pegar a data com o date();
pq to desenvolvendo um sistema q um serial expira e o date(), como rodaria localmente, era so o usuario mudar a data no PC....
se ffor diferente seria util pra mim!!
#7
Posted 14/03/2006, 17:28
FROM
OS_oss AS Oss ,
OS_estagios AS Estagio ,
OS_estagios AS Estagio2 ,
usuarios AS Cliente ,
usuarios AS Respons ,
usuarios AS ResEsta
WHERE
Oss.AnexCliente = Cliente.Id AND
Oss.AnexRespAgencia = Respons.Id AND
Estagio.AnexOss = Oss.Id AND
Estagio.AnexUsuario = ResEsta.Id AND
Estagio.Nome <> 'FINALIZADO' AND
Estagio2.id = MAX(Estagio2.id)
E na lista de campos no SELECT, você coloca:
Estagio2.nome AS EstagioNome
Tente assim irmão, creio que esteja correto.
[]'s
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)