KW Datum werden nicht richtig errechnet

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

  • KW Datum werden nicht richtig errechnet

    Hallo Ihr

    hoffe bin hier im richtigen Forum

    Habe ein Problem mit meinem Sendeplan.

    Und zwar wird da bei den Datum folgendes ausgegeben:

    Sendeplan vom 28.12.2008 - 4.13.2008

    Ich weiss leider nicht warum der da nicht automatisch auf den 1.1.09 springt bzw. was ich falsch am code habe.

    hier mal der code


    PHP-Code:
    function get_monday($kw,$year false) {    
    if (
    $year == false$year date("Y");    
    if (
    $kw || $kw 53) return false;    
    $dayofweek = (intval(date("w",mktime(0,0,0,1,1,$year))) == 0) ? intval(date("w",mktime(0,0,0,1,1,$year)));    
    $dayofyear 7*($kw-2)+(9-$dayofweek);    $days      0;    $i           1;     
    while (
    true) {        
    if (
    $days+date('t',mktime(0,0,0,$i,1,$year)) < $dayofyear$days += date('t',mktime(0,0,0,$i++,1,$year));        
    else return 
    $datum = (($dayofyear-$days 1) ? : ($dayofyear-$days)).".".($i).".$year";    } } 
    $kw = (int)date('W'); $j  $jahr;

    function 
    get_sunday($kw,$year false) {    
    if (
    $year == false$year date("Y");    
    if (
    $kw || $kw 53) return false;    
    $dayofweek = (intval(date("w",mktime(0,0,0,1,1,$year))) == 0) ? intval(date("w",mktime(0,0,0,1,1,$year)));    
    $dayofyear 7*($kw-2)+(15-$dayofweek);    $days      0;    $i           1;     
    while (
    true) {        
    if (
    $days+date('t',mktime(0,0,0,$i,1,$year)) < $dayofyear$days += date('t',mktime(0,0,0,$i++,1,$year));        
    else return 
    $datum = (($dayofyear-$days 1) ? : ($dayofyear-$days)).".".($i).".$year";    } } 
    $kw = (int)date('W'); $j  $jahr;



    $site_body .= '
    <table class="contentbody" colspan="2" width="100%" cellspacing="0" cellpadding="4">
            <tr>
                <td  class="heads"><p><b>Sendeplan für die '
    .$kw_aktuell.'. KW Woche vom '.get_monday($kw,$j).' bis '.get_sunday($kw,$j).'</b></p>            </td>
                  
            </tr>
                    
    </table><br>'

    Danke für eure Hilfe im voraus

  • #2
    also ich weiß das bei mir date diese jahr (2008) statt 53, 01 bei der KW ausgibt. Scheint ein fehler zu sein, genau weiß ich aber nicht wieso das so ist. Denn alle anderen Jahre, davor und danach ist das nicht so.

    Vieleicht hilft es dir aber, den durch deinen Code blick ich nicht so recht durch.

    Kommentar


    • #3
      warum verwendest Du nicht einfach die Funktion strtotime()?
      zB:
      Code:
      //Montag:
      echo date('w')==1 ? date('d-m-Y'):date('d-m-Y',strtotime("Last Monday")); 
      // Sonntag:
      echo date('d-m-Y',strtotime("Sunday"));
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        Original geschrieben von Edlly
        also ich weiß das bei mir date diese jahr (2008) statt 53, 01 bei der KW ausgibt. Scheint ein fehler zu sein, genau weiß ich aber nicht wieso das so ist. Denn alle anderen Jahre, davor und danach ist das nicht so.

        Schon mal in einen Kalender geschaut? Es gibt 2008 nur 52 Wochen.
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          also alle meine kalender haben 53... entwerder habe ich nur fehldrucke oder du irrst dich..

          Kommentar


          • #6
            Wir befinden uns jetzt schon in KW 01/09

            Kommentar


            • #7
              Original geschrieben von Edlly
              also alle meine kalender haben 53... entwerder habe ich nur fehldrucke oder du irrst dich..
              Fehldrucke
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                Original geschrieben von lennart
                Wir befinden uns jetzt schon in KW 01/09
                Das könnte es natürlich erklären!

                Wobei ich leider auch keine regel finde nach der das festgelegt ist, scheint irgenwie auslegungs sache zu sein ob das 01. oder 53. ist? Ist eigentlich auch egal.

                Kommentar


                • #9
                  date('w') richtet sich nach ISO 8601, welches als erste Woche im Jahr die Woche mit dem ersten Januar-Donnerstag definiert. Die anderen Zeitfunktionen in PHP richten sich diesbezüglich hoffentlich auch nach diesem Standard, wobei mir gerade gar keine Funktion einfällt, mit der man sonst noch die Wochennummer bestimmen kann.

                  Kommentar


                  • #10
                    Die Regel ist einfach, es gibt sogar eine DIN nrm dazu:
                    die erste Woche des Jahres ist Woche, in die mindestens vier Tage des neuen Jahres fallen (DIN 1355 / ISO 8601)
                    Beantworte nie Threads mit mehr als 15 followups...
                    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                    Kommentar


                    • #11
                      Die Kalenderwochenzählung nach ISO-8601 wird in der Wikipedia erschöpfend erklärt, ist aber nicht die einzige Zählweise:

                      http://de.wikipedia.org/wiki/Woche#B...n_L.C3.A4ndern

                      http://de.wikipedia.org/wiki/Woche#W...nungsvarianten
                      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                      Kommentar


                      • #12
                        http://www.nwn.de/hgm/kalender/kal-64.htm:

                        Prinzipiell könnte man die zugehörige Kalenderwoche zu
                        einem Datum berechnen, indem man ermittelt um welchen Tag des
                        Jahres es sich handelt und diesen dann durch sieben teilt. Eine
                        Kalenderwoche beginnt aber laut der DIN 1355 - Zeit immer
                        Montags, so dass hierzu zunächst bestimmt werden muss, wann
                        die erste Woche des Jahres beginnt.
                        PHP-Code:
                         function Kalenderwoche(tag,monat,jahr) {
                           var 
                        Woche      0;
                           var 
                        Wchtag1Jan CurrentDoomDay(jahr);
                           var 
                        Tage       Tag_des_Jahres(tag,monat,jahr)-1;

                           if (
                        Wchtag1Jan 3)
                              
                        Tage Tage - (Wchtag1Jan);
                           else 
                        Tage Tage Wchtag1Jan;

                           if (
                        Tage 0)
                              if (   (
                        Wchtag1Jan == 4)
                                  || (
                        CurrentDoomDay(jahr-1) == 3))
                                 
                        Woche 53;
                              else 
                        Woche 52;
                           else 
                        Woche Math.floor(Tage/7) + 1;

                           if ((
                        Tage 360) && (Woche 52)) {
                              if (
                        Wchtag1Jan == 3)
                                  
                        Woche 53;
                              else if (
                        CurrentDoomDay(jahr+1) == 4)
                                      
                        Woche 53;
                                   else 
                        Woche 1;
                           }

                           return 
                        Woche;
                         } 
                        Dieser Algorithmus berechnet zunächst den Jahrestag des
                        Datums, und dann wird die Tagesanzahl so korrigiert, dass
                        beginnend vom ersten Montag des Jahres gerechnet wird. Dies
                        funktioniert gut für 51 Wochen des Jahres, Probleme bereiten die
                        ersten und die letzten Tage des Jahres. Sofern eine negative
                        Tageszahl ermittelt wurde, liegen die ersten Tage eines Jahres in
                        der letzten Woche des Vorjahres. Dabei muss berücksichtigt
                        werden, dass ein Jahr eine 53. Woche hat, wenn es mit einem
                        Donnerstag beginnt oder endet. Genauso muss für die letzten
                        Tages des Jahres bestimmt werden, ob sie in der letzten Woche
                        des aktuellen Jahres liegt, oder aber bereits in der ersten Woche
                        des Folgejahres.

                        Kommentar

                        Lädt...
                        X