Avatar billede Slettet bruger
11. februar 2006 - 20:32 Der er 21 kommentarer og
1 løsning

PHP + MySQL timestamp hvad er bedst

Hej eksperter, hvad er nemst og bedst når man skal beregne nået med login tid osv.

mktime(); - (PHP) - Data type: varchar(11)
time(); - (PHP) - Data type: varchar(11)
NOW() - (MySQL) - Data type: datetime

Hvad er bedst, og hvad fortrækker du og hvorfor?
Avatar billede yezbarh Nybegynder
11. februar 2006 - 20:34 #1
foretrækker time()
Avatar billede Slettet bruger
11. februar 2006 - 20:41 #2
Hvorfor og kender du alle 3 jeg nævner?
Avatar billede jaw Nybegynder
11. februar 2006 - 20:57 #3
Når vi snakker database foretrækker jeg at bruge de funktioner der er i databasen. Det er oftest mest optimalt at bruge de funktioner der er specielt oprettet til formålet, da det ofte er de klart mest optimerede og ressourcebesparende.

Time() og mktime() uden argumenter giver præcist samme output, så ingen forskel på de 2.
Avatar billede Slettet bruger
11. februar 2006 - 20:58 #4
Men det vil sige hvis du skulle regne ud hvornår en bruger er blevet oprettet vil du fortrække NOW() ?
Avatar billede jaw Nybegynder
11. februar 2006 - 21:02 #5
Det ville jeg helt klart, ja. Hvis du så ikke er tilfreds med det format det har i feltet, så ændrer du det bare i dit udtræk med DATE_FORMAT().
Avatar billede Slettet bruger
11. februar 2006 - 21:04 #6
Ja det er jo netop det... eller med strftime(); menes jeg den hedder..
Avatar billede jaw Nybegynder
11. februar 2006 - 21:06 #7
Ja, men det er netop samme problemstilling. Strftime() er en PHP funktion og DATE_FORMAT() er en MySQL-funktion. Jeg vil mene, at ved at gøre det i udtrækket sparer du serveren for en smule ressourcer (omend det nok næppe vil kunne mærkes af den almindelige bruger).
Avatar billede Slettet bruger
11. februar 2006 - 21:11 #8
okay... men jeg bleger så at lave en funktion

function formatDate($date, $date_string = null, $show_time = null)
{
    $new_date = "";
   
    if(is_numeric($date)) {
        $date = date("Y-m-d H:i:s", $date);
    }
   
    $ex1 = explode(" ", $date);
    // if only time, set time to key 1
    if(strstr($ex1[0],":"))
    {
        $ex1[1] = $ex1[0];
        unset($ex1[0]);
    }
   
    // if date
    if(isset($ex1[0]))
    {
        $d = explode("-", $ex1[0]);
        if($ex1[0] == date("Y-m-d") && isset($date_string)) {
            $new_date .= "Idag";
        } elseif($ex1[0] == date("Y-m-d", mktime(0, 0, 0 , date("m"), date("d")-1, date("Y"))) && isset($date_string)) {
            $new_date .= "Igår";
        } else {
            $new_date .= $d[2] . "/" . $d[1] . "-" . $d[0];
        }
    }
   
    // if time
    if(isset($ex1[1]) && isset($show_time))
    {
        $t = explode(":", $ex1[1]);
        if(strlen($new_date) > 0)
            $new_date .= " ";
            $new_date .= $t[0] . ":" . $t[1];
    }
    return $new_date;
}

den er super god...!
Avatar billede Slettet bruger
11. februar 2006 - 21:11 #9
som jeg så bare kan kalde, som du nok godt ved...?
Avatar billede jaw Nybegynder
11. februar 2006 - 21:14 #10
Ja, men det er så fordi du også vil have "igår" og lign. på. Ellers er det for mig at se ikke meget andet end serverspild at lave en funktion til det, når nu der er så mange måder hvor profferne har tænkt det igennem og optimeret det. Men selvfølgelig, det vil jo da virke og give dig det - mit var også bare et forslag :)
Avatar billede Slettet bruger
11. februar 2006 - 21:15 #11
I know... men tak, hvad er den store forkskel på:
1. tinyint og int?
2. int og char? (char kan også være bogstaver eller?)
Avatar billede jaw Nybegynder
11. februar 2006 - 21:17 #12
1. Længden af tal du kan have i feltet. Antallet kan jeg dog ikke lige huske, men det kan du slå op i enten manualen eller ved bare at prøve i phpMyAdmin f.eks.
2. Ja, char er tegn, hvor int er tal.
Avatar billede jaw Nybegynder
11. februar 2006 - 21:17 #13
Forresten ligger manualen med søgefunktion på www.mysql.com hvis du vil læse mere om alt det.
Avatar billede Slettet bruger
11. februar 2006 - 21:20 #14
takker... lægger du lige et svar... :D
Avatar billede jaw Nybegynder
11. februar 2006 - 21:21 #15
Yes, det gør jeg da gerne :) Selv tak.
Avatar billede Slettet bruger
11. februar 2006 - 21:22 #16
Go' weekend!
Avatar billede jaw Nybegynder
11. februar 2006 - 21:23 #17
Mange tak - og i lige måde da :)
Avatar billede Slettet bruger
11. februar 2006 - 21:29 #18
Jaw> forresten noget helt andet, hvordan tjekker jeg så nærmst at brugeren er logget ud?
Mener jeg kan ikke rigtig lave et popup som logger brugeren af, i det de lukker browseren, da bare nu har Service Pack 2, som jo blokker,,,
Avatar billede jaw Nybegynder
11. februar 2006 - 22:16 #19
Det forstår jeg ikke helt. Du kan vel bare logge ham ud ved at slette hans sessions?
Avatar billede Slettet bruger
11. februar 2006 - 22:22 #20
jamen hvis det nu er jeg vil tælle hvor lang tid brugeren har været online, så jeg kan se om han nu laver sit arbejde osv.
Han logger ind, fint bliver tilføjet til min database work_online
og når han så er færdig vil jeg logge hvor lang tid han har været om det osv.
men det der er problemet det er at jeg vil slette ham igen, fra databasen.

Men da jeg ikke kan lave et popup, som tidligere <body Unload="popup();">, så skal jeg finde ud af det på en anden måde, hvis han vælger at lukke browseren frem for at klikke logud
Avatar billede jaw Nybegynder
11. februar 2006 - 22:30 #21
Tjah, tror så det nemmeste er at lave en timeout der sletter ham, hvis han f.eks. er inaktiv i 5 eller 10 minutter.
Avatar billede Slettet bruger
11. februar 2006 - 22:54 #22
Jaw> hvis man nu gjorder ligesom dr.dk's netradio, prøv åben side, og luk den:
http://netradio.dr.dk/content.asp?station=13&
Det var måske en mulighed, så er det så bare lige hvordan de har gjort 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