Avatar billede amews_aj Nybegynder
28. august 2004 - 15:26 Der er 24 kommentarer og
1 løsning

date() udskriver under alleomstændigheder 1 time?

Jeg har lavet dette:

$tiden2 = date("H:i:s",0);
echo "<br>Har været online i: $tiden2";

Men når jeg kører den,
så udskriver den

01:00:00
I kan se det her, den allernederste linje står der det!
Hvad i alverden kan være galt?
www.pc-help.dk/community/test.php

Hjælp!
På orhånd tak!
Avatar billede htm Nybegynder
28. august 2004 - 15:36 #1
date() formaterer en dato udfra en Unix timestamp. Et unix timestamp er antal sekunder siden 1. januar 1970.

Derfor vil din funktion give den dato og tid. den ene time er nok noget med sommertid, eller på det tidspunkt den starter :)

Derfor kan du ikke bruge date til det du skal bruge den til, ser det ud til.

Hvad er det du vil helt nøjagtigt ?
Avatar billede amews_aj Nybegynder
28. august 2004 - 15:39 #2
Jeg skal have noget med online timer,
så laver jeg en time() når brugeren logger ind, og gemmer det i databasen

Når man logger ud, så henter jeg det igen, og samtidig en ny tid, så trækker jeg dem fra hinanden, og så for jeg nogle tal, så skal jeg have det om til tid, og derfor bruger jeg date() på det!

Kan jeg da gøre det på en anden måde?
Avatar billede amews_aj Nybegynder
28. august 2004 - 15:47 #3
KAn jeg på en måde tjekke om date = 01:00:00?
Avatar billede morteeart Nybegynder
28. august 2004 - 15:49 #4
det nemmeste til det vil være at bruge time() , som laver en unix timestamp.
fordi så kan du lave alm. matematik på det.

og så brug data(), til når du skal vise brugeren tallet.
Avatar billede amews_aj Nybegynder
28. august 2004 - 15:54 #5
Ja er det ikke det jeg gør, gemmer time() på det tidspunkt brugeren logger ind, og tager en time() når brugeren logger ud, trækker dem fra hinanden,

$tiden den tid hvor jeg loggede ind  -  den tid jeg loggede ud

så lad os sige det giver 45, og så siger jeg

echo date("H:i:s",$tiden);

Er det det du mener?
Avatar billede amews_aj Nybegynder
28. august 2004 - 15:57 #6
loginsiden >>
-----
$tid = time();
mysql_query("UPDATE login SET logintid = '$tid' WHERE user = '$bruger' LIMIT 1");
-----
<<

Logud siden >>
------
$tidny = time();
        $sel = mysql_query("SELECT * FROM login WHERE user = '$brugernavn' LIMIT 1");
        $go = mysql_fetch_array($sel);
        $tidgam = $go[logintid];
        $tidonlineg = $go[allonlinetid];
        $tidonlinep = $tidny - $tidgam;
        $tidonline = $tidonlinep + $tidonlineg;
        mysql_query("UPDATE login SET logintid = '', allonlinetid = '$tidonline' WHERE user = '$brugernavn' LIMIT 1");
------
<<

Profil siden >>
------
$query = mysql_query("SELECT * FROM login WHERE user = '$sesnavn' LIMIT 1");
$row = mysql_fetch_array($query);

$online = "$row[allonlinetid]";
$online = date("d/m-Y H:i:s",0);
echo "Online tid: $online<br>";
-----
<<<


Sådan er mine filer, er det ikke det du mener jeg skal?
Avatar billede amews_aj Nybegynder
28. august 2004 - 15:57 #7
Hov
Profil siden >>
------
$query = mysql_query("SELECT * FROM login WHERE user = '$sesnavn' LIMIT 1");
$row = mysql_fetch_array($query);

$online = "$row[allonlinetid]";
$online = date("d/m-Y H:i:s");
echo "Online tid: $online<br>";
-----
<<<
Avatar billede amews_aj Nybegynder
28. august 2004 - 15:59 #8
Ups glemte igen noget
Profil siden >>
------
$query = mysql_query("SELECT * FROM login WHERE user = '$sesnavn' LIMIT 1");
$row = mysql_fetch_array($query);

$online = "$row[allonlinetid]";
$online = date("d/m-Y H:i:s", $online);
echo "Online tid: $online<br>";
-----
<<<

Så er den der
Men den lægger hele tiden en time til!
Avatar billede htm Nybegynder
28. august 2004 - 16:11 #9
Nej du kan ikke bruge date() til det du vil, hvis du kalder den funktion med 45 så skriver den tiden som 45 sekunder efter 1. januar 1970.

Du kan eks. bruge denne funktion hvis det er fordi du ønsker at den skrives læsbar for mennesker:

function humanTime($tid)
{
    $dage = floor($tid / 86400);
    $timer = floor(($tid - $dage*86400) / 3600);
    $minutter = floor(($tid - $dage*86400 - $timer*3600) / 60);
    $sekunder = floor($tid - $dage*86400 - $timer*3600 - $minutter*60);
    echo $dage . " dage " . $timer . " timer " . $minutter . " minutter " . $sekunder . " sekunder";
}

kaldes med:

$tid1 = time();  //eksempeltid 1
$tid2 = time()-56974;  //eksempeltid 2
$sum = $tid1-$tid2;
humanTime($sum);

Du kan nok selv rette den til så den skrive det som du vil have den til.

har ikke lige kigget dine scripts som du har postet igennem, sig til hvis du ikke kan finde ud af impletere funktionen.
Avatar billede amews_aj Nybegynder
28. august 2004 - 16:16 #10
Kanon forslag det skal nok virke, jeg kan godt gennemskue den første, men hvad skal
$tid1 = time();  //eksempeltid 1
$tid2 = time()-56974;  //eksempeltid 2
$sum = $tid1-$tid2;
til for?

Kan du ikk skrive noget mere forklaring til ALLe linjer også de første 5!?

Så ville jeg være glad!
Avatar billede amews_aj Nybegynder
28. august 2004 - 16:17 #11
$online = $row[allonlinetid];
$t = date("H:i:s",0);
if($t == "01:00:00") {
$tf = "3600";
}

$online = $online - $tf;

$online = date("d/m-Y H:i:s", $online);


Er dette forslag ligeså godt som dit, eller kan det slå fejl, for det er jo da mere overskueligt!
Avatar billede amews_aj Nybegynder
28. august 2004 - 16:20 #12
nå nej, den skriver 1970, men kom så lige med en forklaring til hvad alt det gange og divider gør i alle linjer i dit eksempel tak!
Avatar billede htm Nybegynder
28. august 2004 - 16:23 #13
function humanTime($tid)
{
    $dage = floor($tid / 86400);    //Udregner antal dage - tiden / 1 dag.
    $timer = floor(($tid - $dage*86400) / 3600);    //Udregner antal timer - (tiden - dage) / 1 time.
    $minutter = floor(($tid - $dage*86400 - $timer*3600) / 60);    //Udregner antal minutter - (tiden - dage - timer) / 1 minut.
    $sekunder = floor($tid - $dage*86400 - $timer*3600 - $minutter*60);    //Udregner antal sekunder (tiden - dage - timer - minutter)
    echo $dage . " dage " . $timer . " timer " . $minutter . " minutter " . $sekunder . " sekunder";    //Udskriver resultatet
}

//Dette er kun for eksemplets skyld.
$tid1 = time();  //Er kun en eksempeltid - time() returner antal sekunder siden 1/1 1970 til nu.
$tid2 = time()-56974;  //tiden fra før - 56974 sekunder - kun for eksmeplets skyld.
$sum = $tid1-$tid2;        //sætter summen lig med tid1 - tid2 - giver 56974
humanTime($sum);        //Kalder funktionen som udskriver tiden til forståelig tid.
Avatar billede amews_aj Nybegynder
28. august 2004 - 16:26 #14
Det virker perfekt!
$tid2 skal vel være det der står i databasen ikke?
Avatar billede htm Nybegynder
28. august 2004 - 16:27 #15
floor() runder et tal ned, hvis du skulle være i tvivl :) http://dk.php.net/manual/en/function.floor.php

så vi tager antal af sekunder divideret med 86400 - det er antallet af sekunder på et døgn. og runder det ned. hvis det giver 0,9999 runder vi ned til 0 dage.

I antal timer skal vi trække antallet af dage fra så vi ikke udregner dem med i antallet af timer. Og antal dage skal selvfølgelig laves til sekunder igen når vi skal trække dem fra.

På den måde fortsætter det.
Avatar billede htm Nybegynder
28. august 2004 - 16:30 #16
Ville umiddelbart sige din skal se sådan ud:

humanTime($row[allonlinetid]);
Avatar billede htm Nybegynder
28. august 2004 - 16:34 #17
Du får også lige et svar :)
Avatar billede amews_aj Nybegynder
28. august 2004 - 16:35 #18
Jep det virker perfekt! Mange tak

Jeg sætter lige point op til 30 for den perfekte hjælp! smid et svar! :D
Avatar billede amews_aj Nybegynder
28. august 2004 - 16:37 #19
MAnge tak for hjælpen! Kanon forslag!
Avatar billede amews_aj Nybegynder
28. august 2004 - 16:39 #20
Hjælp lige her til sidst!

Hvorfor når jeg skrive dette:
echo "Online tid: ".humanTime($row[allonlinetid])."<br>";

Lægger den så alt det med tid du ved, på en linje over Online timer:?
Avatar billede htm Nybegynder
28. august 2004 - 16:42 #21
hmm? forstår ikke helt hvad du mener ?
Avatar billede amews_aj Nybegynder
28. august 2004 - 16:46 #22
Den linje udskriver

0 dage 0 timer 0 minutter 0 sekunder
Online tid:

Hvorfor skriver den sådan?
Avatar billede htm Nybegynder
28. august 2004 - 16:48 #23
Der er der ikke noget i php-koden der skulle gøre. Det er nok din omkringstående html der gør det...

måske noget med du bruger tabeller og ikke får det afsluttet helt?
Avatar billede amews_aj Nybegynder
28. august 2004 - 16:49 #24
nåå ja, jeg skal skrive sådan her!
echo "Online tid: "; humanTime($row[allonlinetid]);
Avatar billede amews_aj Nybegynder
28. august 2004 - 16:50 #25
Den skal ikke med i echoen! Mange tak for hjælpen!
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