Zwei Wochen anzeigen

  • Guten Abend,


    vielleicht könnt ihr mir helfen. Ich möchte gerne auf einer leeren weißen Seiten immer zwei volle Wochen mit PHP anzeigen lassen. Die aktuelle Woche und die Woche zuvor. Begonnen soll mit dem Montag und geendet mit dem Sonntag. Ich stelle mir es so vor:



    Aktuelle Woche:
    Montag (20.07.15) | Dienstag (21.07.15) | Mittwoch (22.07.15) | Donnerstag (23.07.15) | Freitag (24.07.15) | Samstag (25.07.15) | Sonntag (26.07.15)


    Letzte Woche:
    Montag (13.07.15) | Dienstag (14.07.15) | Mittwoch (15.07.15) | Donnerstag (16.07.15) | Freitag (17.07.15) | Samstag (18.07.15) | Sonntag (19.07.15)

  • Ich denke Du willst sicher selbst bissl versuchen =)
    daher hier der Ablauf:
    erstmal die time-zone auf

    PHP
    date_default_timezone_set('Europe/Berlin');


    oder wie Du es brachst.


    Dann holst Du Dir den jetzigen Tag.
    Mit date() http://php.net/manual/de/function.date.php kanst Du Dir u.a. auch den momentanen tag als Zahl zurückgeben lassen.
    zB

    PHP
    echo date("N", time()); // '2', denn heute ist Dienstag


    Jetzt willst Du ja von Montag aus mit der Ausgabe loslegen. Also gehen wir x Tage zurück:

    PHP
    $t = time(); // jetzt als unix timestamp (sekunden)
    $a_day = 60 * 60 * 24; // 60 sec * 60 min * 24 hours (ein tag in sekunden)
    // solange 1 tag abziehen, bis es montag (tag nummer 1) ist:
    while(date("N", $t) > 1){
        $t -= $a_day;
    }
    echo date("N", $t); // '1' für montag


    Jetzt willst Du ja noch eine Woche zurück. Also ziehst Du von $t noch eine Woche ab:

    PHP
    $a_week = $a_day * 7; // sekunden von 1 tag mal 7 tage
    $t -= $a_week; // ist nun der unix timestamp von letzer woche montag


    Was Du jetzt noch machen musst:
    eine Schleife, in der Du (zB) ein array mit der jeweiligen Woche und dessen tage befüllst.
    Dazu zählst Du nach jedem Durchlauf der Schleife um 1 Tag hoch

    PHP
    for(... solange wir nicht am letzten gewünschten tag angekommen sind ...){
        // ... den tag in array packen
        $result[$week][$day] = date('l (d.m.y)', $t); 
       $t += $a_day; // nächste tag
    }


    Das Format l (kleines L) gibt den geschriebenen Wochentag zurück. Allerdings in English -- müsstest Du dann noch mit dt ersetzen.

  • Hallo,


    danke für deine Antwort. Leider verstehe ich deinen Code = 0 Hab etwas gefunden



    Funktioniert auch soweit. Das Ergebnis ist:


    20.07.2015 | 21.07.2015 | 22.07.2015 | 23.07.2015 | 24.07.2015 | 25.07.2015 | 26.07.2015


    Jetzt muss ich noch die Englischen Worte ins Deutsche übersetzten:



    Meine Ausgabe habe ich dann so umgebaut:


    PHP
    echo $wochentag . " ". $dt->format("d.M.Y") . " | ";


    Das Ergebnis sieht so aus


    Montag 20.Jul.2015 | Dienstag 21.Jul.2015 | Mittwoch 22.Jul.2015 | Donnerstag 23.Jul.2015 | Freitag 24.Jul.2015 | Samstag 25.Jul.2015 | Sonntag 26.Jul.2015 |


    Damit wäre mein erstes Problem gelöst. Jetzt muss ich nur noch schauen, wie ich eine Woche zurück komme. Hab versucht -1 einzutragen, da kommt dann folgendes raus, was irgendwie nicht das ist, was ich benötige


    Samstag 18.Jul.2015 | Freitag 17.Jul.2015 | Donnerstag 16.Jul.2015 | Mittwoch 15.Jul.2015 | Dienstag 14.Jul.2015 | Montag 13.Jul.2015 | Sonntag 12.Jul.2015 |


    Edit: Ich sehe gerade man kann auch ein Start und End Datum setzten: http://php.net/manual/de/dateperiod.construct.php Jetzt ist dann nur die Frage, wie teile ich beide Wochen auf, dass quasi ein <br> zwischen der aktuellen und der letzten Woche ist? Geht das überhaupt?

  • Ich hatte angefangen mit Datetime zu antworten. Hab das dann aber wieder verworfen, weil ich dachte es wäre zu aufwendig.
    Aber wie ich sehe kommst Du ja damit klar.


    Du hast schon alles richtig gemacht.
    was Du einfach nur noch machen musstest ist die Woche zuvor als start anzugeben.

  • Hallo cottton,


    vielen Dank für deine erneute Hilfe. Es klappt sehr gut. Nun hätte ich noch eine kleine Frage, ist es möglich ein <br> zwischen den beiden Wochen einzufügen? Derzeit wird einfach alles hintereinander geklatscht.


    Vielleicht wäre es auch gut, ein Titel einzufügen "Aktuelle Woche" " Letzte Woche" ist dieses möglich?

  • Klar geht das. Aber ich dacht Du weißt wie das geht =)


    könnte man noch schöner gestalten. Aber das überlass ich Dir =)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!