Avatar billede webcreator Nybegynder
17. juli 2004 - 20:35 Der er 19 kommentarer og
1 løsning

Datetime i MySQL og time i php

Hej Eksperter.

Jeg ønsker at gøre en variabel sand, hvis tiden i mit datetime-felt svare til nutiden eller senest 5 timer efter denne.

Hvordan gøres det? Time er jo i unix timestamp-format, mens datetime er i YYYY-MM-DD HH-MM-SS.
Avatar billede 3xm Nybegynder
17. juli 2004 - 20:45 #1
fx. ved at bruge date() til at konvertere dit unix-stamp til noget der kan sammenlignes med det andet.

http://dk2.php.net/manual/en/function.date.php

=)
Avatar billede webcreator Nybegynder
17. juli 2004 - 20:51 #2
Det nemmeste havde jo været, at lave datetime om til et time-field. Men det er jeg ikke interesseret i :-)

3xm > Kan du give et eksempel på konvertering vha. date ?
Avatar billede erikjacobsen Ekspert
17. juli 2004 - 20:54 #3
Er det godt nok at gøre det i din sql-sætning?
Avatar billede webcreator Nybegynder
17. juli 2004 - 20:55 #4
Erik > Det må meget gerne klares vha. SQL.
Avatar billede 3xm Nybegynder
17. juli 2004 - 20:56 #5
$nytid = date("Y-m-d H-i-s", $unixtid);

=)
Avatar billede erikjacobsen Ekspert
17. juli 2004 - 21:01 #6
select * from t1 where dato<=adddate(now(),interval 5 hour)

.....sådan ca..... dato er et DATETIME felt
Avatar billede webcreator Nybegynder
17. juli 2004 - 21:02 #7
Skal skal I have - smid points :)

Erik > Ved det - du får et kæmpe tak i stedet for points :-)
Avatar billede 3xm Nybegynder
17. juli 2004 - 21:03 #8
æhh?

=)
Avatar billede webcreator Nybegynder
17. juli 2004 - 21:06 #9
3xm > Forresten ser det da ikke ud til, at dit eksempel giver unixtime. Får man det ikke bare som fx: 2004-07-17 21:08:31  ?
Avatar billede webcreator Nybegynder
17. juli 2004 - 21:07 #10
Glem det..
Avatar billede webcreator Nybegynder
17. juli 2004 - 21:07 #11
Har fattet det - var lige lidt sløv i optrækket :)
Avatar billede Slettet bruger
18. juli 2004 - 00:59 #12
MySQL har også to smarte funktioner, for hvis du vil have rigtige DATETIME-felter i din database og bruge unixtime i PHP

Her er et par kodeeksempler:

INSERT INTO tabel SET datofelt=FROM_UNIXTIME($time)

og

SELECT UNIX_TIMESTAMP(datofelt) as dato FROM tabel

Så har man fordelen af at både PHP og MySQL kan bruge de indbyggede funktioner til at sortere og manipulere datoer alt efter hvor det er smartest at gøre det.
Avatar billede 3xm Nybegynder
18. juli 2004 - 01:01 #13
det er søreme snedigt, sandbox. det burde du næsten have point for.

=)
Avatar billede Slettet bruger
18. juli 2004 - 01:15 #14
Jeg opdagede såmænd funktionerne, fordi jeg altid ønsker at gøre mine databaser så fleksible som muligt, og så kræver det altså at man bruger de korrekte datatyper.

Prøv for eksempel at lave en tabel med hits på en webserver, og så lave et udtræk, som viser antal hits de sidste 30 dage fordelt på døgnet. Med DATETIME-felter, som MySQL selv kan behandle er det ganske simpelt. Med tidspunkter lagret som et unixtimestamp er det lidt besværligere, og hvis man har gemt som et tekstfelt med indhold i stil med 18/7-2004, er det nærmest ikke besværet værd.
Avatar billede webcreator Nybegynder
18. juli 2004 - 12:21 #15
Hej Sandbox.

Mange tak for din ide :-)
Jeg kom i tanke om, at man jo også kunne bruge strtotime, hvis man ville lave et datetime om til unix-time. Så den har jeg også arbejdet lidt med :)
Avatar billede webcreator Nybegynder
18. juli 2004 - 12:24 #16
- Men det er klart, at det ville være smart, at kunne klare konverteringen til UnixTime direkte i SQLstrengen.

Hvordan kunne din ide indsættes i nedenstående streng?  :

$query = mysql_query("SELECT `id`, `test`, `dato` from subjects ORDER BY `placement`") or die(mysql_error());
Avatar billede Slettet bruger
18. juli 2004 - 12:33 #17
Og dato-feltet er en normal DATETIME?

$query = mysql_query("SELECT `id`, `test`, UNIX_TIMESTAMP(`dato`) as dato from subjects ORDER BY `placement`") or die(mysql_error());
Avatar billede webcreator Nybegynder
18. juli 2004 - 12:37 #18
Ok, det var også det jeg prøvede. Går så ud fra, at 'dato' indeholder værdien. Men jeg henter den vel næppe ud som $dato? Er det noget i retning af :
$dato = mysql_result($dato);  ?
Avatar billede Slettet bruger
19. juli 2004 - 13:05 #19
Nej, du henter jo din række ud med en af mysql_fetch_*-funktionerne. Som i følgende eksempel:

$query = mysql_query("SELECT `id`, `test`, UNIX_TIMESTAMP(`dato`) as dato from subjects ORDER BY `placement`") or die(mysql_error());
while($row=mysql_fetch_assoc($query){
  echo date('d/m-Y H:i:s',$row['dato']);
}
Avatar billede webcreator Nybegynder
19. juli 2004 - 13:54 #20
Nåda - så simpelt, heh. Jamen tak for det :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester