webForumDet fria alternativet

Räkna ned

7 svar · 686 visningar · startad av Qimen

QimenMedlem sedan juni 20015 009 inlägg
#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."); 
?>
MatteMedlem sedan aug. 20002 975 inlägg
#2

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);
SnakesMedlem sedan okt. 2004392 inlägg
#3

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!

PeeerMedlem sedan mars 20025 907 inlägg
#4

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.

QimenMedlem sedan juni 20015 009 inlägg
#5

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. ;)

FuzeMedlem sedan nov. 200428 inlägg
#6

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!

MatteMedlem sedan aug. 20002 975 inlägg
#7

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);
FuzeMedlem sedan nov. 200428 inlägg
#8

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!

132 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)