Qimen Medlem sedan juni 2001 5 009 inlägg Frågan 4 jan. 2005 02:40 #1 Hej,
Finns det något smart sätt att räkna ned till ett datum och visa antal timmar och minuter? Jag vet inte varför men jag får en känsla av att mitt sätt nedan är onödigt på något vis. :)
<?
$value = "2005-01-04 06:00:00";
$value = explode(" ", $value);
$datum = explode("-", $value[0]);
$tid = explode(":", $value[1]);
$left = (int)((mktime($tid[0],$tid[1],$tid[2],$datum[1],$datum[2],$datum[0]) - time())/60);
$left = ($left - ($mod = $left % 60)) / 60;
print ("Tid kvar: " . $left . " timmar och " . $mod . " minuter.");
?>
Matte Medlem sedan aug. 2000 2 975 inlägg Du kan ta en titt på strtotime .
Du skulle kunna göra något på det här hållet.
$value = "2005-01-04 06:00:00";
$left = strtotime($value) - time();
$neg = $left < 0 ? 1 : 0;
$hour = floor(abs($left) / 3600);
$min = floor(abs($left) % 3600 / 60);
$pattern = $neg ? "Tiden gick ut för %d timmar och %d minuter sedan" : "Tid kvar: %d timmar och %d minuter";
echo sprintf($pattern, $hour, $min);
S Snakes Medlem sedan okt. 2004 392 inlägg Varför inte köra med javascript?.... då behöver man inte ladda om hela tiden :OO... och ingen Php behövs!
Men men...
EDIT:
$date = date("M d Y H:i:00",$date);
echo '
<script language="JavaScript">
<!--
function getTime() {
now = new Date();
y2k = new Date("' . $date . '");
days = (y2k - now) / 1000 / 60 / 60 / 24;
daysRound = Math.floor(days);
hours = (y2k - now) / 1000 / 60 / 60 - (24 * daysRound);
hoursRound = Math.floor(hours);
minutes = (y2k - now) / 1000 /60 - (24 * 60 * daysRound) - (60 * hoursRound);
minutesRound = Math.floor(minutes);
seconds = (y2k - now) / 1000 - (24 * 60 * 60 * daysRound) - (60 * 60 * hoursRound) - (60 * minutesRound);
secondsRound = Math.round(seconds);
sec = "s";
min = "m, ";
hr = "h, ";
dy = "d, ";
Div.innerHTML = daysRound + dy + hoursRound + hr + minutesRound + min + secondsRound + sec;
newtime = window.setTimeout("getTime();", 1000);
}
// -->
</script>
';
Vill du inte använda php då byter du ut
y2k = new Date("' . $date . '");
mot
y2k = new Date("Jan 05 2005 21:00:00");
För att skriva ut, skriver du: <div id="Div"></div>
Och självklart så måste du starta funktionen i början. Via onload eller via en annan funktion!
Peeer Medlem sedan mars 2002 5 907 inlägg
Snakes skrev:
Varför inte köra med javascript?.... då behöver man inte ladda om hela tiden :OO... och ingen Php behövs!
Om det är en nedräkning till ex. releasedatum av en site så behöver man kanske inte ha en klocka som räknar ner varje sekund (Att räkna ut antalet sekunder är väl dessutom rätt onödigt när bara timmar/minuter efterfrågades).
En annan nackdel med javascript är att man blir beroende av att besökaren dels har javascript aktiverat och dels att besökarens klocka stämmer. Dessutom blir det mer data att överföra.
Qimen Medlem sedan juni 2001 5 009 inlägg Tack Matte för din lösning, den känns mer "rätt".
Snakes: suck, hade jag velat använda javascript hade jag frågat i det forumet, dessutom blir det lite svårt att köra javascript via kommandotolken/konsolen. ;)
F Fuze Medlem sedan nov. 2004 28 inlägg Hejsan!
Mattes Script var precis vad jag letade efter. Men kan man lägga till så den räknar dagar också???
hur???
Tack så länge!
Matte Medlem sedan aug. 2000 2 975 inlägg Testa med:
$left = strtotime($value) - time();
$neg = $left < 0 ? 1 : 0;
$days = floor(abs($left) / (3600 * 24));
$left = abs($left) % (3600 * 24);
$hour = floor($left / 3600);
$min = floor($left % 3600 / 60);
F Fuze Medlem sedan nov. 2004 28 inlägg Tackar så mycke! Fungerade kanon!!!
Men om det är fler som vill använda det så glöm inte ändra de två raderna under också:
$pattern = $neg ? "Började för: %d dagar %d timmar och %d minuter sedan" : "Börjar om: %d dagar %d timmar och %d minuter";
echo sprintf($pattern, $days, $hour, $min); ?>
Tack ska du ha Matte!