-> strftime <- in umgekehrter Form gesucht!

Hi an alle,

also ich habe folgendes Problem:
mit Hilfe von strftime lasse ich mir eine bestimmte Woche des Jahres errechnen!

Zum späteren Zeitpunkt möchte ich errechnen,
welches Datum der Montag dieser Woche hat,
welches Datum der Dienstag …

Gibt es da etwas vordefiniertes?
Mir fällt dazu nämlich nix ein!

Danke
Rike

Hai!

Wenn ich Dich richtig verstehe, dann hast Du die Nummer einer Woche berechnen lassen, oder?!
Ich würde die Wochennummer nehmen und sie in Sekunden umrechnen. Damit bekommst Du einen Timestamp den Du weiter verwerten kannst. Also, wenn es Woche 20 ist, dann einfach
$timestamp= 20 * 7 * 24 * 60 * 60

Das Ganze wäre jetzt aber noch falsch da Woche 1 ja nicht unbedingt auf den 01.01. fällt. Um die ersten paar Tage des Jahres nicht zu unterschlagen einfach überprüfen was für ein Weekday der 31.12. des Vorjahres war.

$tag=date(„w“,mktime(0,0,0,31,12,2002));

// ist der 31.12. ein Mo Di oder Mi beginnt Woche 1
// im Januar sonst im Dez

if (3 0) // date definiert Sonntag als 0
{
$timestamp=$timestamp+(7-$tag)*24*60*60);
}
}
else
{
$timestamp=$timestamp-$tag+*24*60*60);
}

Um das Datum der einzelnen Tage zu berechnen müsstest Du dann einfach einen Tag (24*60*60) drauf addieren. Sollte ansich klappen.

Allerdings ist zu beachten, dass das Ganze auf SUN-Servern um einen Tag daneben liegt, da diese den Sonntag als ersten Tag der Woche ausgeben.

Ich hab’s nicht getestet aber von der Idee her denke ich, dass es klappt. Hoffe, es hilft.

*wink*
Carsten

…heiße Kiste…
Hi Carsten,

also erst mal super lieben Dank für diese HAMMER Antwort!
Hätte ja nie damit gerechnet, das sich jemand solche MÜHE macht!
Habe mich auch sofort an die Arbeit gemacht!

Leider gibt es einen kleinen Haken!

Um den $timestamp zu berechnen,
sollte ich
$woche * 7 (Tage) * 24 (Std) * 60 (min) * 60 (sec)
rechnen.

schien mir auch total logisch,
denoch ist dies nicht ganz korrekt!
Denn, die Zahl die wir daraus erhalten ist nur die Zahl der Sekunden,
die in einem Jahr vergehen!
Beispiel:

$woche = strftime("%W", time());
$woche = $woche + 1; //mit der plus 1 muss ich mein Windows ein wenig austrixen, es wird nämlich sonst immer eine Woche zu wenig berechnet! und der Parameter %V geht bei mir gar nicht!
echo $woche;

$timestamp= $woche * 7 * 24 * 60 * 60;
echo $timestamp;

$datum = date(„d.m.Y“ ,$timestamp);
echo $datum;

Ausgabe:

16

9676800

23.04.1970

Wie du siehst etwas zu wenig!
Die Zählung ging los am 01.01.1970, oder!?

Also müsste man die Sekunden eines Jahres errechnen,
das sind ca 31449600,
dann quasi das aktuelle Jahr minus 1970
also in unserem Fall für heute 33
33 * 31449600 das sind 1037836800
und diese Zahl dann plus $timestamp!

dann erst nähert man sich dem richtigen Ergebnis,
allerdings immernoch nicht korrekt, weil man ja nun jedes Jahr berechnen müsste,
wieviele Tage genau…Schaltjahr…

Also für mein Projekt viel zu aufwendig!

Manno oh mann, ich staune doch, was man da so rausholen kann!

Lieben dank für deinen DENK ANSTOSS!

Ciao
Mareike

Für strftime brauchst du einen timestamp, den hast du also wohl (und wenn nur durch time() die aktuelle Zeit)? Wieso dann so kompliziert und nicht einfach mit getdate() den aktuellen Wochentag bestimmen und dann je nachdem wie weiter der von deinem gewünschten entfernt ist soundsoviel Sekunden abziehen bzw. addieren?

Ich versuchs mal in Code auszudrücken, teste es aber nicht… also keine AHnung ob das funktioniert

$requested_week_day = 1; // 0: Sonntag, 1: Montag… 6: Samstag

$timestamp = time();
$date = getdate();

$newtimestamp = $timestamp - (($date[‚wday‘] - $requested_week_day) * 86400);

Für Sonntag musst du eine extra Behandlung machen, wenn es dir nicht gefällt dass dieser Tag 0 ist.

Grüße
Bruno

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Bruno,

also entweder hab ich dich nicht verstanden („sorry, bin anfängerin“)
oder du hast mich nicht richtig verstanden!

Mein Problem,

ich berechne nach einem eingegebenem Datum, in welcher Woche sich dieses Datum befindet,
z.B. für heute den 16.04.2003
wäre das also Woche 16
das mache ich mit strftime!

so, nun will ich zum späteren Zeitpunkt,
das er mir anhand dieser ‚16‘ sagt:
In der Woche 16 hat der Montag das Datum 14.04.2003
der Dienstag 15.04.2003
und so weiter!

Hoffe ich habe es einigermaßen gut erklärt!

ciao

OK habe dich falsch verstanden, du hast also nur die Zahl 16 als Ausgangsgröße?
Aber wenn du diese selbst berechnest wieso speicherst du nicht nen timestamp ab anstatt nur 16

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Bruno,

ich speicher ja auch den timestamp!
Nur, bei mir geht es darum:
Es werden Tennis-Turniere gespeichert!
Ein Turnier kann aber auch z.B. nur Donnerstags und Freitags stattfinden!
Ich möchte nun eine Tabelle anzeigen,
von Montags bis Sonntags
und dort soll in der nächsten Zeile das Datum für Mo.,
Die… angezeigt werden,
also auch, wenn dort kein Turnier stattfindet!

Na also ist ja perfekt, wenn du den Timestamp von einem Turnier hast kannst du ja mit meinem Code die restlichen Wochentage ausrechnen…

oder ich blick dein Problem immernoch nicht :wink:

Grüße
Bruno

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]