"Auktion slutter om xxx dage, TT:MM:SS"

Tags:    php

Hej,
jeg er meget dårlig til det med udregninger osv, og ønsker en funktion som jeg kan kalde således:

$endsIn = 10394923; //Timestamp dato hvor auktionen slutter.
echo getEndingDate($endsIn);

som returnerer "2 dage, 22:54:16" f.eks.

Kan en klog mand hjælpe mig?



8 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 21 karma
Sorter efter stemmer Sorter efter dato
Differencen timestamp(udløb) - timestamp(nu) er den resterende varighed.

Det har du fat i kan jeg se.

Den skal du ikke omsætte til date() - så får du jo blot den date som differencen repræsenterer!

Differencen er det antal sekunder der resterer mellem nu og udløb, right?

Det skal du omsætte til dage, timer, minutter og sekunder!

En dag er 60*60*24 sekunder = 86400, right? Ergo : så længe differencen er større er der mere end 1 dag tilbage. Derfor trækker du 86400 fra så mange gange du kan, det giver antal dage.

Så må resten være antal timer, minutter og sekunder.

En time er 60*60 = 3600 sekunder. Ergo, så mange gange du kan trække 3600 fra resten, så mange timer er der!

Nu er resten minutter og sekunder ...







Genere et tidstamp der svare til den nuværende tid, også trækker du det fra endsIn, også omregning du det til en dato.
Tag et kig http://php.net/manual/en/function.time.php
og http://php.net/manual/en/function.date.php



round er ikke smart - hvis antallet af timer er 148.6 så runder den op til 149... Hvis man vil have det helt præcist kan man gøre det med heltals division.

Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 29.04.2012 15:48 af Bruger #17015
Kan jo ikke trække fra, når f.eks "$endsIn" er højere end nuværende tid?

$slutter = (time() - $row['slutter']);
echo date("d-m/Y H:is", $slutter);

Udskriver blot 25-12/1969 01:3416

Og...
$slutter = (int)(intval($row['slutter']) - time());

Udskriver blot
-01/1970 22:22:1



Indlæg senest redigeret d. 28.04.2012 19:18 af Bruger #9820
Gør nu hvad manden siger : generer et timestamp.

Se http://www.php.net/manual/en/function.strtotime.php





$row['slutter'] er jo ALLEREDE et timestamp! Timestamp i sekunder, på den dag, auktionen vil udløbe. Hvilket er d. 5. maj.




Ok tak, nu har jeg fundet frem til dagene.

Fold kodeboks ind/udPHP kode 


Men, den udskriver: 6 dage og 148.285833333timer

Det skal kun være 6 dage og xx timer og ikke 148 timer som er 6 dage i timer. Men de resterende fra jeg har hentet de 6 dage, hvis i forstår?

Hvad gør jeg?



Du har omregnet den totale tid til timer, derefter til dage, men du glemmer at trække dagene fra slutterTimer bagefter, derfor får du 148.xx timer. Desuden kan du med fordel bruge round() for at få et helt antal timer



t