Christoph Zurnieden: Timestamp von jeweils nächsten Montag bzw Freitag bestimmen

Beitrag lesen

Hi,

es gibt tatsächlich kein difftime() o.ä. in PHP?

Na, dann von Hand:

Dafür soll ein Dropdown Menü erstellt werden in dem steht

1-Aktuelle Woche    (Montag Datum bis Freitag Datum)
2-Nächste Woche     (Montag Datum bis Freitag Datum)
2-Übernächste Woche (Montag Datum bis Freitag Datum)

Wie bekomme ich nun die Daten von den jeweiligen Montagen und Freitagen?

getdate() füllt ein Array mit Daten, die es aus der übergebenen Zeit (in Sekunden seit der Epoche) herausfummelt. Wird nichts übergeben, wird das aktuelle Datum ausgegeben.

(Beispiel aus Selfphph geklaut)

<?PHP
$zeit = time();// ist nötig, da es um Mitternacht herum sonst
               // schwierig würde ;-)
$datum = getdate($zeit);
echo "Seconds: ". $datum[seconds] . "<br>";
echo "Minutes: ". $datum[minutes] . "<br>";
echo "Hours: ". $datum[hours] . "<br>";
echo "Monthday: ". $datum[mday] . "<br>"; //Tag im Monat (1-31)
echo "Weekday: ". $datum[wday] . "<br>";  // Tag in der Woche (0-6!)
echo "Month: ". $datum[mon] . "<br>";
echo "Year: ". $datum[year] . "<br>";
echo "Yearday: ". $datum[yday] . "<br>";
echo "Weekday: ". $datum[weekday] . "<br>";
echo "Monthname: ". $datum[month] . "<br>";
?>

Ausgabe für heute, Freitag, den 27. August 2004:
Seconds: 41
Minutes: 38
Hours: 11
Monthday: 27
Weekday: 5
Month: 8
Year: 2004
Yearday: 239
Weekday: Friday
Monthname: August

Mittels setlocale() dürfte sich normalerweise auch Deutsch einstellen lassen. Ob sich dann aber die Zählung der Wochentage ändert ist unbekannt, hier funktioniert es z.B. nicht.

So, damit kennst Du den aktuellen Tag, daraus kannst Du den Anfang der Woche ziehen. Soweit noch kein Problem. Nun gibt es aber scheint's doch eine Art difftime() namens strtotime():

$lastweek = ($datum[wday] % 6);
$tmp      = "-1 week -" . $lastweek . " day";
echo "tmp = " . $tmp . "<br>";
$newtime  = strtotime($tmp);
echo "newtime = " . $newtime . "<br><br>";
$datum = getdate($newtime);

echo "Letzte Woche, gleiche Zeit: <br>";
echo "<br>";
echo "Seconds: ". $datum[seconds] . "<br>";
echo "Minutes: ". $datum[minutes] . "<br>";
echo "Hours: ". $datum[hours] . "<br>";
echo "Monthday: ". $datum[mday] . "<br>";
echo "Weekday: ". $datum[wday] . "<br>";
echo "Month: ". $datum[mon] . "<br>";
echo "Year: ". $datum[year] . "<br>";
echo "Yearday: ". $datum[yday] . "<br>";
echo "Weekday: ". $datum[weekday] . "<br>";
echo "Monthname: ". $datum[month] . "<br>";
echo "<br>";

Das ist ein wenig komplizierter als üblich, aber ich war um Deutlichkeit bemüht ... äh ... ;-)

Wenn Du das oben heute ausführst bekommst Du den Sonntag heraus, denn am Sonntag fängt in den USA die Woche an. Aber eins dazu addieren wirst Du ja wohl noch können, oder? ;-)

Aus dem Array oben läßt sich dann mit strftime() etwas hübsches formatieren, z,.B. einen Kalender.

echo strftime("%A, %d-%m-%Y %R", $time)

so short

Christoph Zurnieden