10. november 2003 - 23:14Der er
51 kommentarer og 1 løsning
Trække 2 datoer fra hinanden.
Jeg sidder her med et lille problem i mysql.
Jeg vil gerne trække 2 datoer fra hinanden. Den ene dato ligger i en tubel kaldet time i formatet. 2003-11-10 20:04:04 og den dato der skal trækkes fra er tiden lige nu f.eks. NOW() Det resultatet jeg gerne vil have er hvor lang tid er der gået siden timestampet i time() altså noget i stil med select * from time(blah blah blah)
Resultat:
0000-00-00 00:03:00
Så jeg kan se at der f.eks. er gået 3 timer siden jeg smed det timestamp ind i tublen time.
Har kigget meget i manualen på www.mysql.org men ikke fundet noget desværre.
Enten er min tid ødelagt på serveren eller aner jeg ikke hvordan jeg skal konvertere tingene til noget jeg kan læse. Hvis jeg prøver select FROM_UNIXTIME(92264479); for at kunne se det i normal form så får jeg
| FROM_UNIXTIME(92264479) | +-------------------------+ | 1972-12-03 22:01:19 | Og det kan da vidst ikke passe?
Ja jeg har lige lavet time om til UNIX_TIMESTAMP så det er lettere at rode med. Så det er faktisk 2 UNIX_TIMESTAMPS som bliver trukket fra hinanden. Og jeg skal bare bruge hvor lang tid der er gået imellem dem.
20001208022123 er godt nok et tal, men man kan umiddelbart se dato og tid, og man kan ikke regne på det med + og -, slet slet ikke
1068503847 repræsenterer antal sekunder siden verdens skabelse (1. januar 1970), og egner sig fint til at regne på. Addition og subtraktion af sekunder, giver .... sekunder.
Tricket er at jeg skal smide den nuværende dato(år tid osv) ind når jeg smider noget i min tekst tubel. når jeg så udfører en kommando skal den fortælle mig hvor lang tid der er gået siden det er blevet smidt ind og til nu. Jeg er sådan set ligeglad med hvad format det kommer til at ligge i da det er nye informationer jeg skal smide ind. Så hvis i har forslag til en anden opbyggelse af tabellen er jeg åben for forslag. Bare det kommer til at virke i sidste ende.
Hmm, ja måske du skulle holde dig til det oprindelige DATETIME. Det kan man udemærket omregne. Eller måske et 'timestamp', så behøver du ikke engang selv ligge det ind. Det bliver automatisk opdateret når du laver INSERT eller UPDATE.
Skal du regne på det, så behold unixtime - vil det så ikke virke?
sec_to_time er så en god konvertering fra et antal sekunder der repræsentere en kortere periode (fx. differens mellem to rigtig unixtimestamps). Er der gået mere end een dag kan det se sjovt ud 300:07:09 er 300 timer 7 minutter og 9 sekunder.
Ja det er lige præcis de ting jeg vil undgå. Så hvis i har nogle forslag til hvordan det ellers kan bygges op er jeg åben for forslag. Det skal bare være ikke være alt for besværligt så ingen select sætninger over 600 tegn ;).
Der er kommet 2 forslag, ikke. Jeg holder på unixtimestamps hele vejen igennem - det er hurtigst for maskinen. Andre har lov til men noget andet ... ;)
Hvis det skal være troværdigt med måneder og år kan man ikke bruge differensen mellem to unixtimestamps. Den kan ikke se om man passerer februar eller juli i det antal sekunder den nu består af.
Så skal du tilbage til DATETIME, og til at lave beregningen i din applikation. TCL er ikke lige min kop varm mjød, desværre...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.