Datumsfunktionen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datumsfunktionen

    hallo zusammen,

    ich brauche eine funktion, die mir, je nachdem welcher tag heute ist, ein array mit den tagen der aktuellen woche (von sonntag bis samstag) in einem bestimmten format ("Y-m-d") auswirft.

    heute (und gestern natuerlich auch) z.b. sollte das array (immer sieben eintrage) so aussehen:

    tag[0] = "2001-06-17";
    tag[1] = "2001-06-18";
    tag[2] = "2001-06-19";
    tag[3] = "2001-06-20";
    tag[4] = "2001-06-21";
    tag[5] = "2001-06-22";
    tag[6] = "2001-06-23";

    es sollten natuerlich die richtigen daten sein, d.h. am montag, den 01. oktober sollte das array so aussehen:

    tag[0] = "2001-09-30";
    tag[1] = "2001-10-01";
    tag[2] = "2001-10-02";
    tag[3] = "2001-10-03";
    tag[4] = "2001-10-04";
    tag[5] = "2001-10-05";
    tag[6] = "2001-10-06";

    wenn die aktuelle woche also in den letzten oder naechsten monat reinreicht, dann sollten dafuer natuerlich korrekte daten (unterschiedliche anzahl monatstage beruecksichtigen= ausgegeben werden ...

    kann mir da jemand helfen? hat das schon mal jemand gemacht? ich bin fuer jede hilfe sehr dankbar ...

  • #2
    Loesung

    und schon vorbei:

    Code:
    // heute definieren
    $heute['tag'] = date("j");
    $heute['monat'] = date("n");
    $heute['jahr'] = date("Y");
    $heute['tageswert'] = date("w");
    $heute['monatstage'] = date("t");
    
    // tage vormonat ermitteln
    $vorjahr = $heute['jahr'];
    $vormonat = $heute['monat'] - 1;
    if ($vormonat < 1) {
      $vormonat = 12;
      $vorjahr--;
    }
    $tage_vormonat = date("t",mktime(12,12,12,$vormonat,1,$vorjahr));
    
    // wochenstart ermitteln;
    $a_tag = $heute['tag'] - $heute['tageswert'];
    $a_monat = $heute['monat'];
    $a_jahr = $heute['jahr'];
    if ($a_tag < 1) {
      $a_tag = $tage_vormonat - $a_tag;
      $a_monat = $vormonat;
      $a_jahr = $vorjahr;
    }
    
    // woche definieren
    for ($i=0; $i<7; $i++) {
      $wochentag[$i] = date("Y-m-d",mktime(12,12,12,$a_monat,$a_tag,$a_jahr));
      echo "wochentag[" . $i . "]: " . $wochentag[$i] . "<br>\n";
      $a_tag++;
      if ($a_tag > $heute['monatstage']) {
        $a_tag = 1;
        $a_monat++;
        if ($a_monat > 12) {
          $a_monat = 1;
          $a_jahr++;
        }
      }
    }
    wenn jemand was besseres einfaellt ... immer her damit!
    und weiter so ;-)

    Kommentar


    • #3
      bißchen kürzer...

      Code:
      $heute=-date(w);
      for ($i=0;$i<7;$i++) {
        $tag[$i]=date("Y-m-d",strtotime("+$heute days"));
        echo $tag[$i]."<br>";
        $heute++;
        }

      Kommentar


      • #4
        danke, scheint zu funktionieren.
        und das schreibe ich nicht, weil ich dir nicht traue ... sondern weil ich es nicht verstehe ;-(

        was bedeutet der befehl "strtotime", den gibt es in meinem handbuch nicht?

        Kommentar


        • #5
          ok, "strtotime" erzeugt einen timestamp. aber checkt der befehl das-ende/anfang-des-monats/jahrs-problem? wenn ja, hut ab, merci vielmals und shalom fuer monsieur gehirnkaefer!

          Kommentar


          • #6
            also, mit date(w) hole ich mir den Wochentag, wobei hier der Sonntag praktischerweise schon mit 0 definiert ist.
            als nächstes produziere ich in der Schleife insgesamt 7 Tage -> dabei wird dein gewünschtes Format basierend auf dem Timestamp, der durch strtotime erzeugt wird, ausgegeben.
            strtotime erzeugt aus den coolsten Anweisungen die im entferntesten mit englischem Format zu haben einen Timestamp -> siehe unter http://www.php.net/manual/de/function.strtotime.php nach (hier findest du sowieso so ziemlich alles, was man so im alltäglichen PHP-Leben braucht)
            man kann also sagen strtotime("-1 day") und erzeugt wird der Timestamp vor genau einem Tag seit jetzt. Oder jetzt. Deshalb wird hier auch der negative Wert des Wochentags benutzt und hochgezählt. Warum? Wenn heute der Freitag, also die 5 als Wochentag ist (Sonntag ist 0), dann muß ich ja genau um diese Anzahl in die Vergangenheit, um den Sonntag zu haben, also "-5 days". Und deshalb wird auch $heute immer hochgezählt.
            Ich hoffe, du kannst jetzt den Code nachvollziehen und "vertraust" mir

            P.S.: zu deiner eigentlichen Fragen (hihi, ganz vergessen): strtotime kann damit genauso wie mktime super damit umgehen. Du kannst beiden Befehlen z.B. den 34.13.2001 geben und die machen die netterweise gleich den 3.1.2002 daraus. Das ist ja das cool

            [Editiert von BrainBug am 22-06-2001 um 07:54]

            Kommentar


            • #7
              Frage:

              Hallo kaot,

              kannst du mir vieleicht helfen,
              wie kann ich aufgrund d. Nummer von Kalenderwoche
              Wochentag ermitteln.
              z.B. heute haben wir Kalenderwoche 25 und
              ich brauche für Montag- 25.06.2001 usw.
              Freitag- 29.06.2001.

              Ich bin sehr dankbar im voraus.

              Gruß

              P.S. NT-4,IIS,PHP-4

              [Editiert von ediel am 25-06-2001 um 11:06]

              Kommentar


              • #8
                1.

                Hallo,

                danke, hab ich schon selbe gelost;

                $woche=strftime("%W");
                if($woche>$select)
                {
                $zwischen=$woche-$select;
                for($i=0;$i<5;$i++)
                {
                $date[$i]=date("d.m.Y",strtotime("-$zwischen week +$i day"));
                } // end for
                } // end if
                if($woche<$select)
                {
                $zwischen=$select-$woche;
                for($i=0;$i<5;$i++)
                {
                $date[$i]=date("d.m.Y",strtotime("+$zwischen week +$i day"));
                } // end for
                } // end if
                if($woche==$select)
                {
                $zwischen=0;
                for($i=0;$i<5;$i++)
                {
                $date[$i]=date("d.m.Y",strtotime("+$zwischen week +$i day"));
                } // end for
                } // end if

                wo $select (zwischen 1-53 Kalenderwoche) ist.

                Gruß

                Kommentar

                Lädt...
                X