Avatar billede whyme Nybegynder
10. oktober 2004 - 23:37 Der er 23 kommentarer og
2 løsninger

Hvornår slutter tiden?

Hejsa,

Jeg vil gerne vide hvordan jeg kan lave en funktion eller lille regnestykke til at udregne noget.

Jeg har lavet sådan en lille auktionsside, hvor den skal angive hvornår auktionen "lukker".

Tiden er angivet i time();

Hvordan regnes det ud?
(den skal skrive Xd Xt Xm Xs (dag,timer,min,sek))

Mange tak
Avatar billede bojo Nybegynder
11. oktober 2004 - 00:05 #1
date( "d\d H\\t i\m s\s", time() );
Avatar billede jakoba Nybegynder
11. oktober 2004 - 00:11 #2
$lukketid = mktime( $time_x, $minut, $sekund, $maaned, $dag, $aar );
      // indsæt det tidspinkt auktionen lukker.
$lige_nu = time();

$forskel = $lukketid - $ligenu; 
if ( $forskel < 0 ) {
    echo "beklager, auktionen er lukket";
} else {
    $dage = $forskel / (60*60*24);
    $forskel = $forskel % (60*60*24);
    $timer = $forskel / (60*60);
    $forskel = $forskel % (60*60);
    $minutter = $forskel / (60);
    $forskel = $forskel % (60);
    $sekunder = $forskel;
    echo "Auktionen slutter om $dage dage $timer timer $minutter minutter og $sekunder sekunder."
;
}

mvh JakobA
Avatar billede whyme Nybegynder
11. oktober 2004 - 00:39 #3
JakobA: hvordan indsætter jeg tiden? du skriver:
mktime( $time_x, $minut, $sekund, $maaned, $dag, $aar );

Men jeg har jo tiden i dette format:
1097447338
Avatar billede bojo Nybegynder
11. oktober 2004 - 00:40 #4
og den formatteres med

date( "d\d H\\t i\m s\s", time() );

eller i dit tilfælde

date( "d\d H\\t i\m s\s", 1097447338);
Avatar billede whyme Nybegynder
11. oktober 2004 - 00:47 #5
Koden:
$lukketid = date("d\d H\\t i\m s\s",$row_auctions[auction_end]);
      // indsæt det tidspinkt auktionen lukker.
$lige_nu = time();

$forskel = $lukketid - $ligenu; 
if ( $forskel < 0 ) {
    echo "beklager, auktionen er lukket";
} else {
    $dage = $forskel / (60*60*24);
    $forskel = $forskel % (60*60*24);
    $timer = $forskel / (60*60);
    $forskel = $forskel % (60*60);
    $minutter = $forskel / (60);
    $forskel = $forskel % (60);
    $sekunder = $forskel;
    echo "Auktionen slutter om $dage dage $timer timer $minutter minutter og $sekunder sekunder.";
}

Udskriver:
Auktionen slutter om 0.000127314814815 dage 0.00305555555556 timer 0.183333333333 minutter og 11 sekunder.

og den står stille... den ændrer sig ikke (det burde den jo da time() ikke er konstant...?)
Avatar billede bojo Nybegynder
11. oktober 2004 - 00:52 #6
nååå - du bruger jakoba's, jeg troede du havde koden, men bare skulle formattere tiden

echo "Auktionen slutter om ".floor($dage)." dage ".floor($timer)." timer ".floor($minutter)." minutter og ".floor($sekunder)." sekunder.";
Avatar billede whyme Nybegynder
11. oktober 2004 - 00:53 #7
Stadig samme fejl:
Auktionen slutter om 0 dage 0 timer 0 minutter og 11 sekunder.
Avatar billede whyme Nybegynder
11. oktober 2004 - 00:54 #8
Den udskriver 11 sekunder tilbage.... altid.. :)
Avatar billede whyme Nybegynder
11. oktober 2004 - 00:54 #9
Skal lige sige min tid er pt.:
$lukketid = date("d\d H\\t i\m s\s",$row_auctions[auction_end]);
Avatar billede jakoba Nybegynder
11. oktober 2004 - 01:05 #10
sorry med de mange decimaler, jeg tænkte i Java der.

php afvikles på serveren, for at få den viste tid til at ændre sig må du enten genhente siden hele tiden (hvergang udregner php så nye værdier), eller også bruge javascript lokalt hos brugeren, som fx:
  http://hjem.get2net.dk/Jakob.Aggernaes/javascript/javascript04.html

mvh JakobA
Avatar billede whyme Nybegynder
11. oktober 2004 - 01:06 #11
JakobA: hehe, ja jeg ved godt at siden skal genhentes osv. for at hente tiden igen - det er intet problem, det er let nok. Men selvom jeg opdateret og genhenter det hele osv. - så er der stadig 11 sekunder tilbage med den kode jeg har sendt til dig.
Avatar billede jakoba Nybegynder
11. oktober 2004 - 01:21 #12
Jeg forstår ærlig talt heller ikke den der linie:
    $lukketid = date("d\d H\\t i\m s\s",$row_auctions[auction_end]);
hvis det du har i din database er værdien fra et php timestamp behøver du blot:
    $lukketid = $row_auctions[auction_end];

mht opdateringen, kunne det kanske være du prøver at hent siden igen før den forrige er blevet hentet færdig ?  dvs den forrige hent bliver afbrudt og afløst af en ny der heller ikke bliver færdig, osv. prøv evt med et længer interval immellem dine hent.

eller måske siden bliver hentet fra browserens cashe de følgende gange, det kan undgås med en <meta tag imod cashing, eller en nochashe heder fra serveren.

mvh JakobA

mvh JakobA
Avatar billede bojo Nybegynder
11. oktober 2004 - 01:22 #13
eller da det jo er af betydning at alle har samme tid, se http://www.eksperten.dk/spm/548212
Avatar billede whyme Nybegynder
11. oktober 2004 - 03:15 #14
Nu har jeg:
$lukketid = $row_auctions[auction_end];
      // indsæt det tidspinkt auktionen lukker.
$lige_nu = time();

$forskel = $lukketid - $ligenu; 
if ( $forskel < 0 ) {
    echo "beklager, auktionen er lukket";
} else {
    $dage = $forskel / (60*60*24);
    $forskel = $forskel % (60*60*24);
    $timer = $forskel / (60*60);
    $forskel = $forskel % (60*60);
    $minutter = $forskel / (60);
    $forskel = $forskel % (60);
    $sekunder = $forskel;
    echo "Auktionen slutter om ".floor($dage)." dage ".floor($timer)." timer ".floor($minutter)." minutter og ".floor($sekunder)." sekunder.";
}

som udskriver:


Auktionen slutter om 0 dage 0 timer 0 minutter og 11 sekunder

og den udskriver det samme i Mozilla, Opera, IE, selvom cachen er sat til fra, samt jeg har slettet IEs cache.

Der må være noget galt... og mit tal er pt.: 1097460710

men ligemeget hvilket tal jeg bruger så bliver det 11 sek tilbage... det må være funktionen som har en fejl?
Avatar billede bojo Nybegynder
11. oktober 2004 - 08:27 #15
denne giver med dit tal i $forskel ($forskel=1097460710) svaret:
Auktionen slutter om 3 dage 11 timer 12 minutter og 2 sekunder


$forskel=$ligenu-$$lukketid;
$dage = floor($forskel / 86400);
$forskel -= ($dage*86400);
$timer = floor($forskel / 3600 );
$forskel -= ($timer*3600);
$min = floor($forskel / 60 );
$forskel -= ($min*60);
$sek = floor($forskel);
echo "Auktionen slutter om $dage dage $timer timer $min minutter og $sek sekunder<br />";
Avatar billede whyme Nybegynder
11. oktober 2004 - 11:52 #16
Ahh.... prøv lige at gennemlæse teksterne...

Citat:
$lige_nu = time();

$forskel = $lukketid - $ligenu; 



$lige_nu er ikke $ligenu ;)
Var bare en sk*** "_" fejl ;)
Avatar billede whyme Nybegynder
11. oktober 2004 - 11:52 #17
I må gerne lige lægge et par svar, tak
Avatar billede whyme Nybegynder
11. oktober 2004 - 11:54 #18
JakobA: nu jeg har dig, kan du så ikke give mig en javascript funktion, som tæller ligesom denne her:
http://www.netthandelen.no/index.php?expand=0,10000,10000&viewprod=1663254

altså den tæller ned fra det tal som den har fået fra php. Er det noget du hurtigt kunne bikse til mig? Jeg sætter lige points ydeligere op, da det ikke var med i mit spørgsmål i starten :)
Avatar billede whyme Nybegynder
11. oktober 2004 - 11:57 #19
bojo:
Kan du lige svare på om dette hvis du har tid og lyst:

$tid = time();
mysql_query("DELETE FROM auc WHERE time+60 < $tid");

ikke burde fjerne alle de entries hvor der er gået 60 sekunder (det er som om den ikke reagerer på udregningen,er den skrevet forkert)?
Avatar billede jakoba Nybegynder
11. oktober 2004 - 13:12 #20
bare modificer den jeg gav ovenfor så den ikke udskriver antallet af timer. (Eller få noget til at gøre det for dig i Javascript kategorien.)
Men jeg forstår ikke rigtig hvorfor det er ønskværdigt :-)

mvh JakobA
Avatar billede whyme Nybegynder
11. oktober 2004 - 17:39 #21
jakoba: det er fordi jeg vil have en liste hvor jeg kan udskrive tiden der er tilbage for hver auktion, fra PHP (altså det står stille og ændrer sig ikke)

og hvis man går ind under en enkelt auktion for at se detaljer, tæller auktionen ned fra et bestemt tal, så folk har en fornemmelse om hvornår en given auktion slutter m.m.
Avatar billede bojo Nybegynder
11. oktober 2004 - 18:25 #22
fino
Avatar billede bojo Nybegynder
11. oktober 2004 - 18:25 #23
mente svar jo
Avatar billede bojo Nybegynder
11. oktober 2004 - 18:30 #24
der er noger med at der går ged i PHP tid sammenlignet med sql tid, men det kan løses da sql har en DateDiff, se på

http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html
Avatar billede whyme Nybegynder
11. oktober 2004 - 18:33 #25
Tak
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