"We are back" « oc.at

Countdown

TOM 22.10.2006 - 22:55 1237 3
Posts

TOM

Legend
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7472
Hi Leute

folgendes würde ich benötigen:

Einen Echtzeit-Countdown der sich wiederholt => Er soll jede Woche bis Sonntag 11 Uhr runterzählen (Tage, Stunden, Minuten), wenn er diesen Zeitpunkt erreicht hat 4 Stunden eine Message anzeigen (anstatt des Countdowns) und dann wieder bis zum nächsten Sonntag 11 Uhr runterzählen

Ich hab mich jetzt schon nach ein paar Scripts umgesehen, aber keines hat mir zugesagt. Die Meisten Countdowns zählen nur bis zu einem gewissen Zeitpunkt runter und bleiben dann stehen (und ich habe nicht die Coding-Skills um ihn um zu bauen ;))

Weiters wäre es interessant es so zu lösen, dass er nicht per default von gewissen Adblock Plug-Ins ausgeblendet wird => ich schätze ein Javascript wäre da sehr anfällig/gefährdet... sollte auch per php bzw. html-code realisierbar sein ? (nur dann ist es eben die Frage, ob dies in Echtzeit möglich ist)

Aktuelle Zeit vom Server auslesen lassen wäre halt auch ein Hit, falls der User eine falsche Zeit eingestellt hat...

tia

TOM

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25695
per javascript und php wirklich leicht realisierbar. über adblocker brauchst du dir da keine sorge machen, sonst wären 95% aller javascripthaltigen seiten reine werbeplattformen ;)

das phpscript verwaltet per aufruf die aktuelle anzeige - gibt also je nach counterstatus entweder das javascript für den timer aus oder die message (können der einfachheithalber auch 2 unterschiedliche seiten sein). der timer javascript code zählt einfach die zeit runter, hat allerdings eine abfrage für ein timerende, die ein sitereload erzwingt (falls jemand den timer wirklich einmal abwarten sollte ;)).

die sache sollte sich mit 10 zeilen js und 20 zeilen php locker lösen lassen. wäre vl ein guter einstieg um deine codingskills zu verbessern :)

TOM

Legend
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7472
da gibts keine codingskills, demnach auch nix zum verbessern :D

wärst so lieb mat und tippst ma schnell was dafür :]

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25695
index.php
Code:
<?php

// MACROS
define('DEBUG',true);
define('DEBUG_TIME',mktime(21,59,55,10,22,2006));

define('MESSAGE_TIME_START_WDAY','sunday'); // english weekday
define('MESSAGE_TIME_START_HOUR',23);		// hour of day
define('MESSAGE_TIME_PERIOD',4);			// hours

define('PAGE_TIMER','timer.html');
define('PAGE_MESSAGE','message.html');

// IMPLEMENTATION
//
// => Set timezone (PHP4)
// ..not implemented yet!

// => Set timezone (PHP5)
if (function_exists('date_default_timezone_set'))
	date_default_timezone_set('Europe/Vienna');

// *) Calculate timestamps
$nCurTime = DEBUG ? DEBUG_TIME : time();
$aCurTime = getdate($nCurTime);

$nStartTime = strtotime('+1 '.MESSAGE_TIME_START_WDAY) + MESSAGE_TIME_START_HOUR * 3600;
$aStartTime = getdate($nStartTime);

if ($nStartTime - $nCurTime > 7*24*3600-MESSAGE_TIME_PERIOD*3600)
{
	$nStartTime = mktime(MESSAGE_TIME_START_HOUR,0,0,$aCurTime['mon'],$aCurTime['mday'],$aCurTime['year']);

	if ($aCurTime['wday'] > $aStartTime['wday'])
	// => quick fix for overlapping time in period 1
		$nStartTime -= 86400;

	if ($nCurTime > $nStartTime + MESSAGE_TIME_PERIOD * 3600)
	// => quick fix for overlapping time in period 2
		$nStartTime = strtotime('+1 '.MESSAGE_TIME_START_WDAY) + MESSAGE_TIME_START_HOUR * 3600;
}

$aStartTime = getdate($nStartTime);

// *) Message fork
$bShowTimer = $nCurTime < $nStartTime;

// *) Show output page
$szPage = $bShowTimer ? PAGE_TIMER : PAGE_MESSAGE;

$szContent = file_get_contents($szPage);
if ($szContent === false)
	die("Error: Could not load output page [$szPage]");

// -) Set no-cache headers
header("Cache-Control: no-cache, must-revalidate");	// HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");	// date in the past

// -) Replace current timebase
if ($bShowTimer)
{
	// -) Find current timebase
	$nDiffTime = $nStartTime - $nCurTime;

	$nDays = (int) ($nDiffTime / 86400);
	$nDiffTime -= $nDays * 86400;

	$nHours = (int) ($nDiffTime / 3600);
	$nDiffTime -= $nHours * 3600;

	$nMins = (int) ($nDiffTime / 60);
	$nDiffTime -= $nMins * 60;

	$nSecs	= $nDiffTime;

	$szContent = str_replace(array('[DAYS]','[HOURS]','[MINS]','[SECS]'),array($nDays,$nHours,$nMins,$nSecs),$szContent);
}

echo $szContent;

?>

timer.html
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
	<title>Timer</title>
</head>

<script type="text/javascript">
<!--

var nTimerID  = 0;

var nDays  = [DAYS],
	nHours = [HOURS],
	nMins  = [MINS],
	nSecs  = [SECS];

function updateHTML()
{
	var oTimerDays = document.getElementById('idTimerDays'),
		oTimerHMS  = document.getElementById('idTimerHMS');

	if (!oTimerDays || !oTimerHMS)
	{
		alert('Error: Timer object(s) not found!');
		return false;
	}

	oTimerDays.innerHTML = nDays;
	oTimerHMS.innerHTML	 = nHours + ':' + nMins + ':' + nSecs;

	return true;
}

function updateTimer()
{
	// *) Update timer variables
	if (--nSecs == -1)
	{
		if (--nMins == -1)
		{
			nMins = 59;

			if (--nHours == -1)
			{
				if (--nDays == -1)
				{
					// => reload timer page.. countdown finished
					window.location.reload();

					return;
				}

				nHours = 23;
			}
		}

		nSecs = 59;
	}

	// *) Update html nodes
	if (!updateHTML())
		return;

	// *) Invoke timer again
	nTimerID = setTimeout("updateTimer()",1000);
}

function initTimer()
{
	if (!updateHTML())
		return false;

	nTimerID = setTimeout("updateTimer()",1000);

	return true;
}

//-->
</script>

<body onload="initTimer()">
	<h3>Timer</h3>
	<span id="idTimerDays"></span> Tage
	<span id="idTimerHMS"></span>
</body>
</html>

message.html
Code: PHP
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
	<title>Timer</title>
</head>
<body>
	<h3>Message</h3>
</body>
</html>
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz