"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

simpler php/JS countdown

TOM 12.04.2012 - 21:19 1517 11
Posts

TOM

Super Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7370
Hi Leute

Bräuchte kurz jemanden mit PHP/Javascript-Skills ;)

Habe ein php-skript + javascript (schon lange im einsatz) welches im Prinzip nicht mehr macht als einen Countdown bis zu einem fixen Zeitpunkt (derzeit eingestellt auf Sonntag 1300) zählt und dann eine bestimmte message anzeigt...

das besteht derzeit aus drei files => wär jemand so nett mir das in ein php skript zu mergen (oder auch javascript)? Brauche eine all-in-one Lösung dafür...

countdown.php
Code: PHP
<?php


// MACROS
define('DEBUG',false);
define('DEBUG_TIME',mktime(12,0,15,11,19,2006));

define('MESSAGE_TIME_START_WDAY','sunday'); // english weekday
define('MESSAGE_TIME_START_HOUR',13);		// 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('next '.MESSAGE_TIME_START_WDAY) + MESSAGE_TIME_START_HOUR * 3600;
$aStartTime = getdate($nStartTime);

if ($nStartTime + MESSAGE_TIME_PERIOD*3600 < $nCurTime)
{
	$nStartTime = strtotime('next '.MESSAGE_TIME_START_WDAY,$nStartTime + 86400) + MESSAGE_TIME_START_HOUR * 3600;
	$aStartTime = getdate($nStartTime);
}
else
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('next '.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:
<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;
	}

    if(nDays == 1) {
        oTimerDays.innerHTML = nDays + ' Tag';
    } else {
        oTimerDays.innerHTML = nDays + ' Tage';
    }
	if(nHours == 1) {
		if(nMins ==1) {
			oTimerHMS.innerHTML = nHours + ' Stunde ' + nMins + ' Minute';
		} else {
			oTimerHMS.innerHTML = nHours + ' Stunde ' + nMins + ' Minuten';
		}
	} else {
		if(nMins ==1) {
			oTimerHMS.innerHTML = nHours + ' Stunden ' + nMins + ' Minute';
		} else {
			oTimerHMS.innerHTML = nHours + ' Stunden ' + nMins + ' Minuten';
		}
	} 
	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()" style="margin: 0px; padding: 0px; text-align: center">
Forum-Meeting Countdown:
	<p><a href="http://www.parkour-vienna.at/forum_meeting_informationen.html" target="_parent"><span id="idTimerDays"></span></p>
	<p><a href="http://www.parkour-vienna.at/forum_meeting_informationen.html" target="_parent"><span id="idTimerHMS"></span></a></p>
</body>

message.html

Code:
<body style="margin: 0px; padding: 0px; text-align: center">
    <p><a href="http://www.parkour-vienna.at/forum_meeting_informationen.html" target="_parent">Forum-Meeting</a></p>
    <p><a href="http://www.parkour-vienna.at/forum_meeting_informationen.html" target="_parent">findet gerade</a></p>
    <p><a href="http://www.parkour-vienna.at/forum_meeting_informationen.html" target="_parent">statt</a></p>
</body>

PS: Oder falls ihr was simpleres in php/JS dafür habt, bin ich auch dafür zu haben... das ganze hier hat sich nur bereits bewährt

PPS: Das Ganze muss nur auf Minute genau sein, kein aktiver Sekunden-Counter

tia!

-=Willi=-

The Emperor protects
Avatar
Registered: Aug 2003
Location: ~
Posts: 1624
http://www.ricocheting.com/code/jav...countdown-timer

Bei den Stellen dateFuture1 = new Date(2012,3,13,22,32,59); und dateNow = new Date(); vom generierten könnte man dann mit PHP einsteigen.

TOM

Super Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7370
Zitat von -=Willi=-
http://www.ricocheting.com/code/jav...countdown-timer

Bei den Stellen dateFuture1 = new Date(2012,3,13,22,32,59); und dateNow = new Date(); vom generierten könnte man dann mit PHP einsteigen.

Dieser Countdown ist aber für ein Event, mein Countdown ist wiederkehrend.... jeden Sonntag 1300 Uhr, dann wird eine Zeit lang eine Message angezeigt und dann startet der Countdown wieder bis zum nächsten Sonntag 1300...

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25423
Aus welchem Grund willst du die Sachen überhaupt mergen? Wo soll es integriert werden? Ich habe das Gefühl, dass hier das Konzept einfach überdacht werden muss. Am Code wird es nicht liegen (der ist auch von mir!!11), weil du brauchst eigentlich immer einen PHP und JS-Teil bei so einer Aufgabe. Natürlich kann man das Javascript in den PHP-Code einschleusen, aber dafür müssen man wissen, wo es integriert werden soll. ;)

TOM

Super Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7370
soll im endeffekt in einen sidebar-block eines forums, wo ich die wahl zwischen zwei modi hab:

1.) RAW HTML/JS
If enabled, NO PARSING will occur. Good if you want to show html/javascript only, such as an embeded widget or a banner.

2.) PHP mode
If enabled, and above Raw Mode is disabled, entire block contents needs to be in PHP. You need to return the html to be displayed, and do not use echo, print, etc. And do not use open/closing php tags.

wär somit praktischer das alles in einem skript zu haben, anstatt mit mehreren files am webspace

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25423
Dann ist es eh leicht. Du brauchst den PHP mode und musst die countdown.php als Javascript-File einbinden. Natürlich entsprechend umgestaltet. Die Einbindung des Skript-Files erfolgt als Rückgabe für diesen Block (scheinbar als zusammengebastelter PHP-String) per script-Tag. Drunter musst du dann den HTML-Code vom Timer reingeben, ohne Body-Tag natürlich.

TOM

Super Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7370
Zitat von mat
Dann ist es eh leicht... Natürlich entsprechend umgestaltet.

genau deswegen habe ich gehofft, dass mir das jemand schnell machen kann ;)

TOM

Super Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7370
keiner zeit dafür?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25423
Wenn du dich selber darum kümmerst, dann wärst du nicht mehr auf die Hilfe anderer angewiesen. Ist nicht bös gemeint, aber das Grundproblem ist, dass die Erstversion schon nicht von dir ist.

TOM

Super Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7370
Zitat von mat
Wenn du dich selber darum kümmerst, dann wärst du nicht mehr auf die Hilfe anderer angewiesen. Ist nicht bös gemeint, aber das Grundproblem ist, dass die Erstversion schon nicht von dir ist.

Das Grundproblem ist, dass ich wenig/kaum Ahnung vom Coden hab und das leider nicht so hin bekomme, wie es notwendig wäre

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25423
Du bist ja scheinbar in diesem Bereich tätig, sowohl beruflich als auch hobbymäßig. Wäre doch sicher eine nette Erweiterung deiner Fähigkeiten. Es ist nie zu spät, etwas zu lernen. :)

TOM

Super Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7370
Zitat von mat
Du bist ja scheinbar in diesem Bereich tätig, sowohl beruflich als auch hobbymäßig. Wäre doch sicher eine nette Erweiterung deiner Fähigkeiten. Es ist nie zu spät, etwas zu lernen. :)

Jein... ich kann php/JS so gut, um es lesen (manchmal anpassen) und verstehen zu können, was es macht... schreiben nicht.

der kosten/nutzen faktor zahlt sich einfach nicht aus momentan, um tiefer ein zu steigen und deswegen hoffe ich auf die leute mit den skills in dem gebiet, da es meinem verständnis nach keine große sache sein sollte (wahrscheinlich realisiert in der zeit, wo wir diskutieren... aber nicht erlernt).

ausserdem kann man's auch so sehen... wenn ich den unterschied zwischen alten parts und neuem all-in-one skript sehe, werde ich auch was daraus/davon lernen...


edit: mit trial and error bin ich die letzten wochen (mit meinem hobby-projekt) mehr als genug beschäftigt btw. ;) Ist nicht so, als wenn ich mit jedem sch**s da her fragen komm... nur der countdown stammt original von hier... ;)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz