Kalenderwoche aus Datum

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

  • Kalenderwoche aus Datum

    Hallo zusammen,

    wie kann ich die aktuelle KW aus einem Datum ermitteln ?

    Ich habe eine Tabelle (mysql), in der ich die ersten drei Spalten habe:

    KW, von, bis

    Nun will ich, dass das Datum heute verwendet wird, um die KW zu ermitteln und somit die richtige Zeile in der Tabelle ausgelesen wird.

    Ich hab es schon mit einem Select versucht, doch stimmt was mit den Operatoren nicht, denn die Option

    SELECT ....... WHERE ´von´ < $Variable ans ´bis´> $Variable

    geht nicht. $Variable ist das aktuelle Datum in YYYY-MM-DD Fomat.
    In der Spalte von und bis sind auch Datumswerte in diesem Format. Der Datentyp ist Date.

    Fazit:

    Ich will vergleichen, in welche KW das heutige Datum paßt und diese Zeile dann auslesen. Und dazu:
    Der Eintrag in der Spalte bis ist identisch mit dem nächsten von.
    Ist das Datum also gleich bis müssen 2 Zeilen ausgelesen werden.


    Tabelle KW

    KW | von | bis | Text
    ----------------------------------------------------------------------
    19 | 2002-04-08 | 2002-04-15 | blabla
    20 | 2002-04-15 | 2002-04-22 | xyz
    ...
    (nur Bsp, KW sind nicht richtig)

    Sagen wir, heute ist der 18.04.2002, dann soll die Zeile mit
    KW 20 ausgelesen werden (da zwischen 15. und 22.04.2002)
    Am 15.04.2002 jedoch beide Zeilen (da in zwei Zeilen vorhanden).

    Kann mir jemand helfen ??


    Solaris
    ---------------------------------------------
    Die Hoffnung stirbt zuletzt.

  • #2
    in mysql gibt es eigene Parameter für die Funktion date_format:

    %u Week (0..53), where Monday is the first day of the week
    %v Week (1..53), where Monday is the first day of the week. Used with '%x'
    %x Year for the week, where Monday is the first day of the week, numeric, 4 digits, used with '%v'

    Seit PHP 4.1.0 hat auch die Funktion date einen entsprechenden Parameter, der dem oben angegebenen %u entspricht:

    Mit date('W', $time) (großes W!) bekommst die ISO6801-Wochennummer des angegebenen Zeitpunkts, das entspricht der Europäischen Kalenderwoche - mit einer Ausnahme: Daten die zur letzten Kalenderwoche des vorherigen Jahres gehören, liefern die 0 zurück; in dem Fall solltest du dann die KW des 31.12. des Vorjahres ermitteln.
    PHP-Code:
    $t mktime(0,0,0,$m,$d,$y);
    $j $y;
    if (
    0==($kw=date($t'W')))
    {
      
    $kw 1+date($t-68400*date('w'$t), 'W');
      
    $j--;
    }
    echo 
    "Der $d.$m.$y liegt in der Kalenderwoche $kw/$j"
    Mit einem kleinen Trick wird die letzte KW der Vorwoche ermittelt: $t-68400*date('w',$t) liefert den Sonntag (also den letzten Tag) der Vorwoche. Eins auf das Ergebnis draufgerechnet, und die korrekte Kalenderwoche ist ermittelt. Anschließend wird noch die Jahreszahl dementsprechend korrigiert, und das Ergebnis kann verarbeitet werden.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Danke Titus,

      ich probiere das sofort aus, wenn ich zuhause bin.

      Solaris
      ---------------------------------------------
      Die Hoffnung stirbt zuletzt.

      Kommentar


      • #4
        Kalenderwoche

        Hallo,

        mit PHP 4.0.6

        habe ich so gemacht:

        <?php
        $Jahr=$wo; // z.B. $wo = 2001 oder 2002
        $selopt="";

        // heute definieren
        $heute['tag'] = 1; // 1
        $heute['monat'] = 1; // Januar
        $heute['jahr'] = $Jahr; // Jahr
        $heute['tageswert'] = date("w",mktime(0,0,0,1,1,$Jahr))-1; // Tag der Woche
        $heute['monatstage'] = date("t",mktime(0,0,0,1,1,$Jahr)); // Anzahl der Tage des Monats

        // tage vormonat ermitteln

        $vorjahr = $heute['jahr'];
        $vormonat = $heute['monat'] - 1;
        if ($vormonat < 1)
        {
        $vormonat = 12;
        $vorjahr=$vorjahr-1; // 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;
        }

        for($x=1;$x<53;$x++)
        {
        // woche definieren
        for ($i=0; $i<7; $i++)
        {
        $wochentag[$i] = date("d.m.Y",mktime(12,12,12,$a_monat,$a_tag,$Jahr));
        $heute['monatstage'] = date("t",mktime(0,0,0,$a_monat,$heute['tag'],$Jahr));
        $a_tag++;
        if ($a_tag > $heute['monatstage'])
        {
        $a_tag = 1;
        $a_monat++;
        if ($a_monat > 12)
        {
        $a_monat = 1;
        $a_jahr++;
        }
        }
        }
        $selopt.="<option value='$x'>$wochentag[0]-$wochentag[6]";
        }
        ?>

        Und dann bei <select> echo $selopt. </select> z.B. zum Auswahl
        in HTML ausgeben.

        Viel Spaß

        Gruß

        ediel

        Kommentar


        • #5
          nicht ein bißchen lang?!

          Hier ist mein altes date('W'):
          PHP-Code:
          function kalwo($t)
          {
            
          $w date('w'$t);
            
          $z date('z'$t);
            
          $wjan4 = (367+$w-$z)%7;
            return (int)(
          1+($z-3+$wjan4)/7)-!$w+!$wjan4;

          erweitert um Anpassung bei KW=0:
          PHP-Code:
          function kalwo2($t)
          {
            
          $y date('Y'$t);
            
          $w date('w'$t);
            
          $z date('z'$t);
            
          $wjan4 = (367+$w-$z)%7;
            
          $kw = (int)(1+($z-3+$wjan4)/7) - !$w + !$wjan4;
            if (!
          $kw)
            {
              
          $y--;
              
          $kw 52 + (int)(1==$wjan4 ||
                (!
          $wjan4 && 29==date('t'mktime(0,0,0,2,1,$y))));
            }
            return 
          "$kw/$y";

          Zuletzt geändert von Titus; 23.04.2002, 10:45.
          mein Sport: mein Frühstück: meine Arbeit:

          Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

          Kommentar

          Lädt...
          X