Countdown - Wochentagermittlung

jc-freak

Mitglied
Hallo Freunde der Sonne!

Also ich habe schon wieder ein Problem und komm nicht weiter, selbst ein struktogramm hat mir nicht geholfen. Mir fehlt gerade einfach der Denkansatz :(

Ich möchte gerne das automatisch der erste Freitag im kommenden Monat ermittelt wird. Es soll dann vom aktuellen Tag bis zum ersten Freitag im kommenden Monat runtergezählt werde. Das Ganze scheitert bei mir mit der Ermittlung des ersten Freitags im kommenden Monat. Wäre cool wenn ihr mal schaun könntet was ihr machen könnt ;)

PHP:
for (var i = 0; i < 6; i++) {
	var wochentag = new Date().getDay;
	var datum = new Date().getDate;
	if(wochentag == 5) {
		datum = new Date();
		break;
	}
}

var jahr = datum.getFullYear();
var monat = datum.getMonth();
var tag = datum.getDate();

var date = jahr.toString()","datum.toString()","tag.toString()",19";

var zieldatum = date.split(",");
var newDate = new Date(t[0], parseInt(t[1], 10) - 1, t[2], t[3]);
trace(newDate);

var actDate = new Date();
var diffDate = (newDate-actDate) / 1000;

var days = int(diffDate / 24 / 60 / 60 );
var diffDate = diffDate - (days*24*60*60);
// Stundenanteil berechnen
var hours = int(diffDate / 60 / 60);
var diffDate = (diffDate - (hours*60*60));

var minutes = int(diffDate/60);
var diffDate = diffDate - (minutes*60);

var seconds = int(diffDate);

if((seconds < 0) || (minutes < 0) || (hours < 0) || (days < 0)) {
    var message = "Countdown Fehler";
	days = 0;
	hours = 0;
	minutes = 0;
	seconds = 0;
}
else
{
	var message = "Countdown bis PunktSieben";
}

mfg
freak
 
Hi,

vielleicht hilft Dir das weiter. Auf diese Weise bekommst Du den ersten Freitag des nächsten Monats:
PHP:
var today = new Date();

var m = (today.getMonth() < 11)? today.getMonth() + 1 : 0;
var y = (m == 0)? today.getYear() + 1900 + 1 : today.getYear() + 1900;

var nextMonth = today;

nextMonth.setMonth(m);
nextMonth.setYear(y);
nextMonth.setDate(1);
trace(nextMonth);
// Damit haben wir den 1. des nächsten Monats

while(nextMonth.getDay() != 5) {
	nextMonth.setDate(nextMonth.getDate() + 1);
}

// damit haben wir den ersten Freitag des nächsten Monats
trace(nextMonth);
(hoffe ich zumindest, habs mal schnell aus dem Kopf getippt)

Gruß
.
 
oha danke das klappt ja ;)

nun bleibt mir nur noch das Problem das er erst den nächsten Monat wieder nach dem ersten Freitag durchforsten soll, wenn der nächste Freitag erreicht ist. Sprich der Counter soll IMMER bis auf 0 gehen und dann wieder bis zum nächsten ersten Freitag laufen.

PHP:
var today = new Date();

var m = (today.getMonth() < 11)? today.getMonth() + 1 : 0;
var y = (m == 0)? today.getYear() + 1900 + 1 : today.getYear() + 1900;

var nextMonth = today;

nextMonth.setMonth(m);
nextMonth.setYear(y);
nextMonth.setDate(1);
trace(nextMonth);
// Damit haben wir den 1. des nächsten Monats
while(nextMonth.getDay() != 5) {
    nextMonth.setDate(nextMonth.getDate() + 1);
}
// damit haben wir den ersten Freitag des nächsten Monats
trace(nextMonth); 

var zieldatum = new Array(nextMonth.getFullYear(), nextMonth.getMonth(), nextMonth.getDate())

var newDate = new Date(zieldatum[0], zieldatum[1], zieldatum[2], 19);
trace(newDate);

var actDate = new Date();
var diffDate = (newDate-actDate) / 1000;

// Tagesanteil berechnen
var days = int(diffDate / 24 / 60 / 60 );
var diffDate = diffDate - (days*24*60*60);
// Stundenanteil berechnen
var hours = int(diffDate / 60 / 60);
var diffDate = (diffDate - (hours*60*60));
// Minutenanteil berechnen
var minutes = int(diffDate/60);
var diffDate = diffDate - (minutes*60);

var seconds = int(diffDate);

if((seconds < 0) || (minutes < 0) || (hours < 0) || (days < 0)) {
    var message = "Countdown Fehler";
	days = 0;
	hours = 0;
	minutes = 0;
	seconds = 0;
}
else
{
	var message = "Countdown bis PunktSieben";
}
 
Hi,

ich sehe das Problem nicht ganz... so sollte es eigentlich funktionieren:
PHP:
var today = new Date();
var nextMonth = new Date();

var m = (today.getMonth() < 11)? today.getMonth() + 1 : 0;
var y = (m == 0)? today.getYear() + 1900 + 1 : today.getYear() + 1900;


nextMonth.setMonth(m);
nextMonth.setYear(y);
nextMonth.setDate(1);
// Damit haben wir den 1. des nächsten Monats

while(nextMonth.getDay() != 5) {
	nextMonth.setDate(nextMonth.getDate() + 1);
}
// damit haben wir den ersten Freitag des nächsten Monats

// WIr können noch die Urhzeit für den Freitag einstellen:
nextMonth.setHours(17, 30, 0);

trace(today);
trace(nextMonth);

var diffDate = (nextMonth.getTime() - today.getTime()) / 1000;

var days = int(diffDate / 24 / 60 / 60 );
var diffDate = diffDate - (days * 24 * 60 * 60);

// Stundenanteil berechnen
var hours = int(diffDate / 60 / 60);
var diffDate = (diffDate - (hours * 60 * 60));

// Minutenanteil berechnen
var minutes = int(diffDate/60);
var diffDate = diffDate - (minutes * 60);

trace(days + " Tage, " + hours + " Stunden, " + minutes + " Minuten");

Gruß
.
 
Das Problem besteht einfach darin, dass sobald der erste des nächsten Monats (grade also der 1. August) ist, sucht das Script sich wieder den nächsten Freitag (also vom September) und der Counter kommt somit nie auf 0 :|

Mir fällt da auch grad absolut nichts zu ein ... man müsste halt irgendwie das Datum des Freitags im August merken und bis dahin rechnen.

grüße
freak

PHP:
var today = new Date();
var nextMonth = new Date();

var m = (today.getMonth() < 11)? today.getMonth() + 1 : 0;
var y = (m == 0)? today.getYear() + 1900 + 1 : today.getYear() + 1900;

// Erster des nächsten Monats
nextMonth.setMonth(m);
nextMonth.setYear(y);
nextMonth.setDate(1);

// Erster Freitag des Monats (sprich: 5 für Freitag)
while(nextMonth.getDay() != 5) {
    nextMonth.setDate(nextMonth.getDate() + 1);
}

// Uhrzeit (Stunden, Minuten, Sekunden):
nextMonth.setHours(19, 00, 0);

trace(today);
trace(nextMonth);

var diffDate = (nextMonth.getTime() - today.getTime()) / 1000;

// Tagesanteil berechnen
var days = int(diffDate / 24 / 60 / 60 );
var diffDate = diffDate - (days*24*60*60);
// Stundenanteil berechnen
var hours = int(diffDate / 60 / 60);
var diffDate = (diffDate - (hours*60*60));
// Minutenanteil berechnen
var minutes = int(diffDate/60);
var diffDate = diffDate - (minutes*60);
// Sekundenanteil
var seconds = int(diffDate);

trace(days + " Tage, " + hours + " Stunden, " + minutes + " Minuten, " + seconds + " Sekunden");

// Sicherheitsabfrage
if((seconds < 0) || (minutes < 0) || (hours < 0) || (days < 0)) {
    var message = "Countdown Fehler";
	days = 0;
	hours = 0;
	minutes = 0;
	seconds = 0;
}
else
{
	var message = "Countdown bis PunktSieben";
}
 
Na, dann pack die Berechnung des nächsten Monats doch einfach in eine Abfrage.

So in etwas sollte das gehen:
PHP:
if (today.getDate() > 5) {
	var m = (today.getMonth() < 11)? today.getMonth() + 1 : 0;
	var y = (m == 0)? today.getYear() + 1900 + 1 : today.getYear() + 1900;
} else {
	var m = today.getMonth();
	var y = today.getYear() + 1900;
}

Gruß
.
 
SAUBER!

So gehts fast, bis auf die Zeit ... um 19 Uhr ist der Countdown eigentlich vorbei, sobald die Uhr aber über 19 Uhr geht, gibts minus countdown.
Wenn du mir das noch hinzufügen könntest wäre das super und dann fuchs ich mich da mal rein und erstell ein Struktogramm für Lernzwecke ;)

grüße
freak
 
Ungetestet, daher vielleicht fehlerhaft:
PHP:
var stunde = 17;
var minute = 30;

if (today.getDate() > 5) {
	var m = (today.getMonth() < 11)? today.getMonth() + 1 : 0;
	var y = (m == 0)? today.getYear() + 1900 + 1 : today.getYear() + 1900;
} else {
	var m = today.getMonth();
	var y = today.getYear() + 1900;
	if (today - getDate() == 6) {
		if (today.getHours() > stunde - 1 || (today.getHours() == stunde - 1 && today.getMinutes() > minute)) {
			var m = (today.getMonth() < 11)? today.getMonth() + 1 : 0;
			var y = (m == 0)? today.getYear() + 1900 + 1 : today.getYear() + 1900;
		}
	}
}
Die Variablen "stunde" und "minute" verwendest Du dann auch zum Stellen der Uhr am Freitag.

Ich gebe zu: hätte ich vorher darüber nachgedacht, was am selben Tag passieren soll, hätte ich ganz anders (nämlich mit einer Funktion) begonnen - das hätte einiges an Wiederholungen gespart. ;)

Gruß
.
 
Sorry, so gehts:
PHP:
var today = new Date();
var nextMonth = new Date();

var stunde = 17;
var minute = 30;

if (today.getDate() > 5) {
	var m = (today.getMonth() < 11)? today.getMonth() + 1 : 0;
	var y = (m == 0)? today.getYear() + 1900 + 1 : today.getYear() + 1900;
} else {
	var m = today.getMonth();
	var y = today.getYear() + 1900;
	if (today.getDay() == 5) {
		if (today.getHours() > stunde || (today.getHours() == stunde  && today.getMinutes() > minute)) {
			var m = (today.getMonth() < 11)? today.getMonth() + 1 : 0;
			var y = (m == 0)? today.getYear() + 1900 + 1 : today.getYear() + 1900;
		}
	}
}

nextMonth.setMonth(m);
nextMonth.setYear(y);
nextMonth.setDate(1);

while(nextMonth.getDay() != 5) {
	nextMonth.setDate(nextMonth.getDate() + 1);
}

nextMonth.setHours(stunde, minute, 0);

var diffDate = (nextMonth.getTime() - today.getTime()) / 1000;

var days = int(diffDate / 24 / 60 / 60 );
diffDate = diffDate - (days * 24 * 60 * 60);
var hours = int(diffDate / 60 / 60);
diffDate = (diffDate - (hours * 60 * 60));
var minutes = int(diffDate/60);
diffDate = diffDate - (minutes * 60);

trace(today);
trace(nextMonth);
trace(days + " Tage, " + hours + " Stunden, " + minutes + " Minuten");
Das kommt davon, wenn man es aus dem Kopf versucht, weil man zu faul ist, Flash anzuwerfen ;)

Gruß
.
 
Zurück