Ankündigung

Einklappen
Keine Ankündigung bisher.

Wochentage ausgeben

Einklappen

Neue Werbung 2019

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

  • Gast-Avatar
    Ein Gast erstellte das Thema Wochentage ausgeben.

    Wochentage ausgeben

    Hallo liebe com,

    wie kann ich es in PHP realisieren, die Wochentage auzugeben welche innerhalb einer Zeitspanne liegen? Die Zeitspanne wird durch zwei date
    Formate (date1 - date2) aus der DB definiert.

    So ungefär: echo alle date('w') zwischen date1 und date2

  • Gast-Avatar
    Ein Gast antwortete
    Mhm ich hab es rausbekommen wie man das änderen kann , das bezog sich nun auf meine Klasse im spezifischen:

    PHP-Code:
    <?php
    ...
                if(
    date("I",mktime(0,0,0,$Monat,$Tag+1,$Jahr)) == 0  &&  $Monat == 10){ 
                    
    $this->startDay $this->startDay+3600*25
                }else{ 
                    
    $this->startDay $this->startDay+3600*24
                }
    ?>
    Ich habe einfach geschaut ob der Tag der der nächste ist Winterzeit hat , das wird mit date("I") ermittelt und gibt eine 0 zurück wenn ja.

    Im prinzip muss man sich den Tag nur rausfischen , diesem einen Wert zuweisen und vergleichen ob der Tag schon vorbei ist oder nicht.
    Das gleiche Spiel muss man von der Winterzeit zur Sommerzeit nochmal machen.

    Beide umstellungen finden meines Wissens nach nun nur im Oktober und im März statt somit kann man diese Monate schon mal eingrenzen.Zumindest traten da bei mir Probleme auf.

    Den Tag kann man im Prinzip einfach ermitteln indem man , wenn man bei dem Tag angelangt ist einfach was einsetzt und dann mittels empty() schaut ob schon ein Wert dafür existiert.Wenn ja dann halt mit 24 Stunden weiter rechnen , ansonsten halt 25 stunden raufrechnen oder 23 Stunden.

    Bei der Klasse war es quasi nun egal da jeder Monat neu gestaltet wird , und somit würde das nicht mehr ins Gewicht fallen.
    Das heisst er rechnet zwar am Ende vom Oktober immer 25 Stunden drauf. Aber da der November neu ermittelt wird gibt es keine Probleme.

    Edit : @dilemma ob das so funktioniert weiss ich nicht :/ aber mal austeste n gleich. Der Hinweis mit der Winter zur Sommerzeit hat mich um 99% vorran getrieben so das das Problem schon mal klar war

    Danke Dir dafür an dieser Stelle noch einmal ausdrücklich. Ich bin wirklich fast Wahnsinnig geworden dabei.

    Einen Kommentar schreiben:


  • N!cKY
    antwortet
    ich hab jetzt nicht alle posts gelesen, hoff mal dass das jetzt noch reinpasst:
    wenn du auch Daten (? datums..naja egal ) hast die vor dem 1.1.1970 sind, klappen die funktionen hier nicht!
    hab da mal ne funktion geschrieben, die den wochentag berechnet, von jedem datum:
    http://nicky.eaglescripts.de/mathe/?...nes_Datums.php
    sorry falls des grad net passt!

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    @Fips:
    Code:
    ---------------------------------------------------------------------
       function AktuellerTag($Tag,$Monat,$Jahr){
          $LaufDatum = $Tag.".".$Monat.".".$Jahr;
          $this->AktuDay = date("j.n.Y",$this->startDay);
    
          if($this->AktuDay == $LaufDatum){
    
            if($this->startDay < $this->endDay){
                $this->startDay = $this->startDay+3600*24; //<<<<<<<<<<<<<<<<<<<<<<< !!!!!
    /*-----------------------------------^^^^^^^^^^^^^^^^^
    *   Weil du hier bei deiner Berechnung davon ausgehst,
    *   daß jeder Tag 24 Stunden hat.
    *   Der Tag, an dem von Sommer- auf Winterzeit umgestellt wird, hat aber 25 Stunden,
    *   und der Tag, an dem von Winter- auf Sommerzeit geschaltet wird hat 23 Stunden.
    *   Die Zeitumstellung Sommer/Winterzeit wird immer am letzten Sonntag des Monats Oktober
    *   vorgenommen.
    *   Im Jahr 2011 erfolgt die Umstellung Sommer/Winterzeit am 31.Oktober.
    *   Deshalb kannst du diesen Fehler im Oktober 2011 nicht sehen.
    
    */
    ---------------------------------------------------------------------
    Du solltest ALLE deine MKTIME()-Funktionen, die du verwendest
    wie folgt formulieren:
    Code:
    --------> mktime(1,0,0,$this-> ...
    Dann sollte es richtig funktionieren!

    ~dilemma~

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Ich habe ein ähnliches Problem in meiner Kalender Klasse , ich kam durch deinen Beitrag darauf noch einen Kalender einzubauen wo man sich mehere Tage einfach einzeichnen lassen kann.

    Also innerhalb eines Monats nur , dabei kommt es zu einen interessanten Effekt der mich krank macht. Und zwar beim Oktober :

    Wenn ich sage färbe mal alles vom 22.10.2005 - 31.10.2005 ein dann färbt er alles vom 22.10.2005 - 30.10.2005 ein.

    Andere Monate funktionieren prima hingegen in jedem Jahr nur der Oktober nicht, anders gesehen nun mal :

    Nehmen wir uns nochmal den Oktober vor diesmal im Jahre 2007

    also sagen wir färbe alles vom 22.10.2007 - 31.10.2007 aber hier färbt er nur noch vom 22.10.2007 - 28.10.2007
    Er färbt dann immer einen Tag weniger ein , er geht runter das er nur noch bis zum 25.10.2007 einfärbt und das im Jahre 2010 aber nun kommt der Clou : im Jahre 2011 färbt er es wieder alles komplett ein.
    Keine Ahnung was da los ist genau , das kuriose is ja das er alle anderen Monate macht soweit nur beim Oktober zickt er rum.

    Hier mal wie ich das gelöst habe nun Oktober Bug existiert dennoch.

    PHP-Code:
    <?php
    CLASS FromDayToDay extends Kalender{

      var 
    $AktuDatu = array(); // Array für die aktuellen Tag
      
    var $startDay// StartTag
      
    var $endDay;   // EndTag
      
    var $AktuDay;
      var 
    $dateS;
      var 
    $dateE;
      
    /******************************************************************************/

        
    function FromDay1ToDay2($date=""){

            
    /* Wenn kein Datum in Form eines Arrays übergeben wurde
               Fehlermeldung generieren und Script abbrechen ansonsten
               ein neues Array AktuDatu mit den Daten füllen zu weiteren
               Verarbeitung */

            
    if(empty($date) OR !is_array($date)){
              echo 
    "Keinen gültigen Zeitraum übergeben";
              echo 
    "<pre>
                 \$date =array(\"StartDatum1\" => \"EndDatum1\",
                              \"StartDatum2\" => \"EndDatum2\");
                    </pre>"
    ;
              DIE(
    "Verarbeitung wurde abgebrochen !");
            }else{

               for(
    $i 0;$i<count($date);$i++){
                    
    $this->AktuDatu[key($date)] = current($date);
                    
    next($date);
                }

            }

            
    $this->setDayToCollorate();
            return 
    $this->KalenderG($this->dateS[1],$this->dateS[2]);
        }

    /******************************************************************************/

        
    function setDayToCollorate(){

          
    $this->dateS explode(".",key($this->AktuDatu));
          
    $this->dateE  explode(".",current($this->AktuDatu));

          
          
    $this->startDay mktime(0,0,0,$this->dateS[1]
                                        ,
    $this->dateS[0]
                                        ,
    $this->dateS[2]);

          
    $this->endDay  mktime(0,0,0,$this->dateE[1]
                                       ,
    $this->dateE[0]
                                       ,
    $this->dateE[2]);
        }

    /******************************************************************************/

       
    function AktuellerTag($Tag,$Monat,$Jahr){
          
    $LaufDatum $Tag.".".$Monat.".".$Jahr;
          
    $this->AktuDay date("j.n.Y",$this->startDay);

          if(
    $this->AktuDay == $LaufDatum){

            if(
    $this->startDay $this->endDay){
               
                
    // Von Sommer auf Winterzeit umstellen

                
    if(date("I",mktime(0,0,0,$Monat,$Tag+1,$Jahr)) == 
                          
    && $Monat == 10){
                    
    $this->startDay $this->startDay+3600*25;
                }else{
                    
    $this->startDay $this->startDay+3600*24;
                }
                
             }elseif(
    $this->startDay == $this->endDay && next($this->AktuDatu)){
               
    $this->setDayToCollorate();
             }

           
    // Farbe für das Tabellenfeld im aktuellen Tag
           
    return $this->MarkDayColor;
            
          }else{
            return 
    "";
          }
        }

    /******************************************************************************/

    }// Klasse FromDayToDay schliessen
    Die Kalender Klasse mal anbei damit du die anderen Methoden noch kennst:

    PHP-Code:
    <?php
    /*******************************************************************************
                                    Klasse Kalender
    *******************************************************************************/
    CLASS Kalender{
        
    /**
        * Array für den Starttag
        */

        
    var $Weekdays   = array(=>"Monday",
                                    
    "Tuesday",
                                    
    "Wednesday",
                                    
    "Thursday",
                                    
    "Friday",
                                    
    "Saturday",
                                    
    "Sunday");
                                    

        
    /**
        * Array für den Kalender Header
        */
        
        
    var $Wochentage = array (=>"Mo",
                                     
    "Di",
                                     
    "Mi",
                                     
    "Do",
                                     
    "Fr",
                                     
    "Sa",
                                     
    "So");
                                     
        
    /**
        * Variablen für den Kalender setzen
        */
                                     
        
    var $TKopf;     // TabellenKopf Monate einzeichnen
        
    var $KGrid;     // Kalender Grid Tage einzeichnen
        
    var $KalenderG// Gesammter Kalender
        
    var $AktuDatum// Aktuelles Datum
        
        /***************************************
        *          Farben für die Tabelle      *
        ***************************************/
        
        
    var $TableColor             '#00CCCC'// Hintergrund Farbe der Tabelle
        
    var $TableDeskColorBody     '#00FF00'// Farbe des Tabellenkopfes/Monat
        
    var $FontColorHeader        '#000000'// Schrift Farbe für den Tabellenkopf
        
    var $FontColorTD            '#000000'// Schrift Farbe der Tage 1- 31
        
    var $MarkDayColor           '#00FF00'// Farbe des aktuellen Tages

    /*******************************************************************************
    Section KalenderHeader
        Kalender Kopf Mo Di ...
    *******************************************************************************/

        
    function KalenderHeader(){
          for(
    $i 1;$i <= count($this->Wochentage);$i++){
            
    $this->TKopf .= "<td align='center'
                                 width='15'
                                 height='15'
                                 bgcolor='"
    .$this->TableDeskColorBody."'
                                 style='font-size:10pt;
                                        color:"
    .$this->FontColorHeader.";
                                        border:1px solid;
                                        padding:0px;'>"
                                
    .$this->Wochentage[$i]."</td>";
          }
          return 
    $this->TKopf."<tr>";
        }
    /*******************************************************************************
    Section Aktueller Tag
        Aktuellen Tag ermitteln und hintergrundfarbe zurückgeben
    *******************************************************************************/

        
    function AktuellerTag($Tag,$Monat,$Jahr){
          
    $LaufDatum $Tag.".".$Monat.".".$Jahr;

          if(
    $this->AktuDatum == $LaufDatum){
            return 
    $this->MarkDayColor;
            
    // Farbe für das Tabellenfeld im aktuellen Tag
          
    }else{
            return 
    "";
          }
        }
        
        function 
    termine($tag,$monat,$jahr){
          
    //Datenbankanbindung herstellen
          //ergebnisse abrufen und als link kennzeichnen lassen wenn ein Eintrag
          //gefunden wurde
          //ansonsten nur den $tag zurückgeben lassen wieder.
        
    }
        
    /*******************************************************************************
    Section KalenderGrid
        Kalender Körper für die einzelenen Tage einzeichen
    *******************************************************************************/

        
    function KalenderGrid($Monat,$Jahr=""){

          
    $MonatsTage 1;
          
    $tag 1// LaufzeitVariable für den aktuellen Monatstag
          
          // Ersten Tag ermitteln
          
    for($i=$i <= 7;$i++){

              
    /* wenn der aktuelle wochentag (voll ausgeschrieben englische Namen
                 gleich dem aktuellen Wert des Array Elements ist brich die Schleife
                 ab $i bleibt derweil erhalten*/
                 
              
    if(date("l"mktime(0,0,0,$Monat,1,$Jahr)) == $this->Weekdays[$i]){
                    break;
              }else{
                    
    // ansonsten zeichne ein leeres Tabellenfeld
                    
    $this->KGrid .= "<td width='10' height='10'></td>";
              }
          }

          
    /*************************************************************************
          2. Zeile in der Kalender Tabelle einzeichnen
          jede weitere Zeile wird zu der Variablen KGrid hinzugefügt
          Jeder Tag der eingezeichnet wird wird überprüft ob es der aktuelle Tag ist
          *************************************************************************/

          /*Solange wie $tag kleiner ist als die Azahl der Tage des Monats
            date("t") gibt die Anzahl der Monate zurück
            $i = 1-7 */
            
          
    while($tag <= date("t",mktime(0,0,0,$Monat,1,$Jahr))){
               if(
    $i%== 0){
                 
    // Wenn der Tag Sonntag ist $i = 7 , $i = 14 , $i = 21 ...
                    
    $this->KGrid .= "<td align='right'
                                         width='10'
                                         height='10'
                                         bgcolor='"
    .
                                             
    $this->AktuellerTag($tag,$Monat,$Jahr)
                                         .
    "'style='padding:0px;
                                                   border:1px solid;
                                                   font-size:8pt;
                                                   color:"
    .$this->FontColorTD."'>".
                                             
    $tag
                                         
    ."</td></tr>";
                    
    $i++;
                    
    $tag++;
                }else{
                  
    // von Montag bis Samstag durchlaufen und Tage einzeichen
                  
    $this->KGrid .= "<td align='right'
                                       width='10'
                                       height='10'
                                       bgcolor='"
    .
                                            
    $this->AktuellerTag($tag,$Monat,$Jahr)
                                       .
    "'style='padding:0px;
                                                 border:1px solid;
                                                 font-size:8pt;
                                                 color:"
    .$this->FontColorTD."'>".
                                            
    $tag
                                       
    ."</td>";
                  
    $i++;
                  
    $tag++;
                }
            }

          
    /* Ausgabe der Zeit in deutsch */
          
    setlocale(LC_TIME,'de_DE','ge');

          
    // Hier wird nur der Monat eingefügt noch hinter dem Kalender Grid
          
    return $this->KGrid.'<tr><td colspan="7"
                                       align="center"
                                       bgcolor="'
    .$this->TableDeskColorBody.'"
                                       style="padding:0px;
                                              border:1px solid;
                                              font-size:8pt;
                                              color:'
    .$this->FontColorHeader.';"
                                       height="10"
                                       width ="100">'
    .
                                         
    strftime("%B"mktime(0,0,0,$Monat,1,$Jahr))."/".$Jahr
                                       
    .'</td></tr>';
          }
    /*******************************************************************************
    Section Kalender Gesammt
      Der Kalender wird hier zusammen gefügt
      [Tabelle]-Kalender Header + Kalender Grid-[/Tabelle]
      Danach werden die Variablen Kalender Grid und KalenderKopf(Tkopf) wieder geleert
      sonst zeigt er wenn man sich einen weiteren Monat ainzeigen lassen  will nochmal
      den ersten Monat extra an .
    *******************************************************************************/

        
    function KalenderG($Monat,$Jahr=""){

            if(empty(
    $Jahr)){
              
    $Jahr date("Y");
            }

            
    $this->KalenderG '<table style="border:1px solid;
                                              padding:0px 2px 0px 2px;"
                                       height="145"
                                       width ="145"
                                       bgcolor="'
    .$this->TableColor.'"
                                       background="">
                                    <tr>'
    .
                                       
    $this->KalenderHeader().
                                       
    $this->KalenderGrid($Monat,$Jahr).
                                   
    '</tr></table>';
            
    $this->KGrid '';
            
    $this->TKopf ''
            return 
    $this->KalenderG;
        }
    }
    // Klasse Kalender schliessen
    ?>
    Der Oktober Fehler mal hier demonstriert beim Aufruf der Klasse :

    PHP-Code:
    <?php
    $Kalender 
    = new FromDayToDay;
    $date = array("1.10.2007" => "4.10.2007",
                  
    "10.10.2007" => "15.10.2007",
                  
    "17.10.2007" => "19.10.2007",
                  
    "22.10.2007" => "31.10.2007");
    echo 
    $Kalender->FromDay1ToDay2($date);

    $Kalender2 = new FromDayToDay;
    $date = array("1.1.2007" => "4.1.2007",
                  
    "10.1.2007" => "15.1.2007",
                  
    "17.1.2007" => "19.1.2007",
                  
    "22.1.2007" => "31.1.2007");
    echo 
    $Kalender2->FromDay1ToDay2($date);

    $Kalender2 = new FromDayToDay;
    $date = array("1.3.2007" => "1.3.2007",
                  
    "10.3.2007" => "15.3.2007",
                  
    "17.3.2007" => "19.3.2007",
                  
    "22.3.2007" => "31.3.2007");
    echo 
    $Kalender2->FromDay1ToDay2($date);
    ?>
    Das sieht dann ca so aus alles :

    http://139.18.193.65/Kalender/Kalender_Klasse.php

    Frag mich bitte nicht warum er den Oktober nicht macht , ob es ein Bug innerhalb der Zeitfunktion ist oder ich einen Fehler gemacht habe , ich hab es x mal durchgetestet , mehere Jahre abe der Oktober arbeitet nur zu gewissen Jahren richtig.
    Beim normalen Kalender allerdings richtig , er hat Probleme damit den Tag als Timestamp weiter hochzuzählen. So das er manchmal schon am 29.10 stoppt oder am 25.10 schon.

    Wo ich es eben lese könnte dieses mit der Umstellung zur Sommer / Winterzeit zu tun haben , doch übersteigt dieses nun meine Kentnisse.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    diese Berechung ist fehlerhaft, wenn date1 das Tag ist,
    an dem die Uhr von 'Sommerzeit' auf 'Winterzeit' umgestellt wird.
    Weil dieser Tag 25 Stunden hat!
    Code:
    while($date1 <= $date2){
       echo strftime("%A" , $date1)."
    ";
       $date1 += 3600*24;   //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< !!!
    }
    ~dilemma~

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Das stimmt, wollte erstmal dass das alles funktioniert. Die Optimierungen kommen später. Aber danke für den Tipp, so denke ich daran :wink:

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    $date1 = $_REQUEST['year1']."-".$_REQUEST['month1']."-".$_REQUEST['day1'];
    ...
    $date1 = explode('-', $date1);
    $dayOfWeek = (int)date('w', mktime(1,0,0, $date1[1], $date1[2], $date1[0]));
    Erst zusammen- und dann wieder auseinanderfriemeln ...das kannst Du Dir dann auch sparen

    $d1ex = explode('-', $date1);
    $d2ex = explode('-', $date2);
    sogar zweimal auseinanderfriemeln ....

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    @Bruchpilot

    du hast das vollkommen richtig verstanden, dabei einen Senkrechtstart mit Looping und weicher Landung hingelegt. Das ist genau was ich meinte. Auch sehr gut weitergedacht mit der Ausgabe der SQL-Anweisung. Das hätte ich so nicht bzw. mit viel mehr Zeit hinbekommen. Danke.

    Ich habe jetzt noch die Diff. Berechnung der Usereingaben von date1 und date2 miteingebaut, so das $days autom. gesetzt und übergeben werden.

    PHP-Code:
    <?php
    $date1 
    $_REQUEST['year1']."-".$_REQUEST['month1']."-".$_REQUEST['day1'];
    $date2 $_REQUEST['year2']."-".$_REQUEST['month2']."-".$_REQUEST['day2'];
    $d1ex explode('-'$date1);
    $d2ex explode('-'$date2);
    $d1mk mktime(000$d1ex[1], $d1ex[2], $d1ex[0]); 
    $d2mk mktime(000$d2ex[1], $d2ex[2], $d2ex[0]);
    $diff $d2mk $d1mk;
    $days round(($diff/60/60/24)); //Anzahl an Tage
        
    if ($days<7) {
        echo 
    $days//nur zum überprüfen
        
    }
        else {
        echo 
    "es sind mehr als 7 Tage"//hier direkt zur mysql_query
        
    }
    // ab hier nur wenn $days < 7
    // Namen der Bit-Felder in der Datenbank
    $fieldnames = array(0=>'So''Mo''Di''Mi''Do''Fr''Sa');

    // ersten Wochentag ermitteln
    $date1 explode('-'$date1);
    $dayOfWeek = (int)date('w'mktime(1,0,0$date1[1], $date1[2], $date1[0]));

    $where = array();
    for(
    $i=0$i<$days%7$i++) {
    //   /* Debug */echo '

    Debugi:', $i, ' -> index:', ($dayOfWeek+$i) % 7, ' -> Feld:', $fieldnames[($dayOfWeek+$i) % 7], "</p>\n";
       $where[] = $fieldnames[($dayOfWeek+$i) % 7] . '
    =1';
    }

    ///* Debug */echo '

    Debug', print_r($where, true), "</p>\n";

    $where = join(' 
    OR ', $where); //$where an mysql_query übergeben
    echo $where; // zum überprüfen
    ?>
    @dilemma
    das ist auch ein guter Vorschlag, da weekday den Wochentag-Index zurück gibt. (kann ich etvl. noch gebrauchen)

    @Zergling und Fips
    das stimmt wirklich und ich kann mir das nicht erklären, außer wie Zergling schon sagte Array Problem. Wenn ich andere Tage z.B. (11.11.2005 - 24.12.2005 (Beispiel von Fips)) eingebe funktioniert das tadellos. Nur bei der Eingabe 29.11.2005 - 1.11.2005 nicht.

    Ihr könnt das (wenn ihr mal wollt) unter:

    http://clients.smartdragon.de/test/test.php

    testen.

    @Fips
    genau Sonntag wir haben hier noch den Monatg frei (Reformationstag) deswegen kann ich hier noch was machen

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Japs bei mir kommt sowas heraus dabei

    ...
    Freitag
    Samstag
    Sonntag
    Montag
    Dienstag
    Mittwoch
    Donnerstag
    Freitag
    Samstag
    Sonntag
    Montag
    ...

    Wenn es aus einer DB ausgelesen wird , dann hat ja ein Event mehere verschiedene Termine.Also würde ich einfach beim einspeichern die Daten eintragen direkt und bei der Ausgabe werden dann x Felder als Link makiert wobei halt mehere den selben Inhalt haben.Also den selben Event.

    Hier rennt noch ein Thread rum wo einer ein Tut für ein Kalender sucht , da habe ich ein Link zu einer KalenderKlasse gepostet , wo ich mir das mal eingebunden habe das mehere Tage farbig makiert werden.
    Das Problem was ich da sehe das 1. nur 1 Kalender ausgegeben werden kann und 2. nur innerhalb des Monats die Tage farbig makiert werden.

    Wäre zum Beispiel 1 Event vom 2.10 - 15.10 und der zweite Event vom 21.10 - 29.10 müsste man 2 Kalender einbauen Was nun nicht sonderlich effizient ist.
    Also noch eine weitere Ausbau Möglichkeit das man mehere Tage einzeichnen kann pro Monat. Aber da heute Sonntag ist bin ich nun zu faul dafür

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    Zitat von smartdragon
    @Script von Zergling und Fips
    Samstag
    Sonntag
    Sonntag
    Montag
    Das halte ich für einen Fehler in deinem Array, der die Wochentage enthält. Den Timestamp bei jedem Schleifendurchlauf um einen Tag (24*60*60 Sekunden) zu erhöhen produziert garantiert nicht 2x den Sonntag.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Nur mal so ein Vorschlag:
    Code:
    "
    SELECT * FROM tabelle
    WHERE ( ('$SucheVonDatum' <= date2) AND ('$SucheBisDatum' >= date1) )
    ORDER BY WEEKDAY(date1) < WEEKDAY(CURDATE()), WEEKDAY(date1)
    ";
    ...
    wobei dann $SucheVonDatum und $SucheBisDatum im "MYSQL_date_Format" vorliegen müssen!
    (wenn ich dich richtig verstanden habe...)
    ~dilemma~

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Na mal sehen, ob ich es halbwegs verstanden habe
    PHP-Code:
    <?php
    $dStart 
    '2005-10-27';
    $days 4;

    // ab hier nur wenn $days < 7

    // Namen der Bit-Felder in der Datenbank
    $fieldnames = array(0=>'So''Mo''Di''Mi''Do''Fr''Sa');

    // ersten Wochentag ermitteln
    $dStart explode('-'$dStart);
    $dayOfWeek = (int)date('w'mktime(1,0,0$dStart[1], $dStart[2], $dStart[0]));

    $where = array();
    for(
    $i=0$i<$days%7$i++) {
        
    /* Debug */echo '

    Debug: i:'
    $i' -> index:', ($dayOfWeek+$i) % 7' -> Feld:'$fieldnames[($dayOfWeek+$i) % 7], "</p>\n";
        
    $where[] = $fieldnames[($dayOfWeek+$i) % 7] . '=1';
    }

    /* Debug */echo '

    Debug: '
    print_r($wheretrue), "</p>\n";

    $where join(' OR '$where);
    echo 
    $where;
    ?>

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    genau da liegt mein Problem.

    Ich kann wohl nur auf PHP zurückgreifen, da es in mysql keinen Befehl gibt, der die Wochentage zwischen date1 und date2 berechnen/ausgeben kann.

    Mal zum Sachverhalt:
    Ich bin gerade an einem Event Kalender bei und dort gibt es einmalige und mehrmalige Events. Die Zeitspanne der Einmaligen wird mit date1 - date1 und die mehrmaligen mit date1 - date2 eingetragen. Jedes date1 und date2 natürlich in separaten DB Spalten (Datentyp -> Date). Dazu können die mehrmaligen Events öfters in der Woche laufen. z.B. jeden Mo und Di oder nur jeden Do oder oder ... dazu sind 7 weitere Felder in der DB angelegt worden. (von mo - so) Welche beim stattfinden mit einer 1 andernfalls mit einer 0 versehen sind. Die einmaligen werden mit einer 1 oder 0 in einem anderen Feld markiert. Bisher logisch.

    Nun ist es aber so, der User gibt date1 und date2 ein (über ein Formular) um alle Events innerhalb dieser Zeitspanne angezeigt zu bekommen. Das funktioniert auch.

    Geht der vom User gewählte Zeitraum >= 7 Tage sind alle Wochentage enthalten und es können getrost alle Events angezeigt werden. Ist der Zeitraum aber kleiner und beinhaltet nur z.B. den Montag und Dienstag, werden ja auch alle mehrmaligen Events angezeigt welche auch in diesem Zeitraum liegen aber z.B. nur am Do stattfinden. Und das soll verhindert werden.

    Deswegen hab ich mir gedacht, nach dem der User date1 und date2 eingegeben hat, wird errechnet ob es mehr als 7 Wochentage sind, dann geht es gleich zur mysql_query andernfalls werden die Wochentage "ausgegeben" um die mehrmaligen Events anzuzeigen welche eine 1 bei den "ausgegebenen" Wochentagen in der Spalte der DB haben. Und dabei bin ich jetzt....

    Ich hoffe du konntest folgen... ist nicht gerade die Logik der Logik aber wüsste es nicht anders zu realisieren. Das ist mein erstes Projekt mit php und mysql....

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Würde ich halb und halb von Mysql und PHP berrechnen/liefern lassen
    PHP-Code:
    <?php
    // query: SELECT date1, DATEDIFF(date1,date2) as anzahl FROM ...
    // $row = mysql_fetch_array($result);
    $row = array(); $row['date1'] = '2005-10-26'$row['anzahl'] = '7';


    $dStart explode('-'$row['date1']);

    for(
    $i=0$i<$row['anzahl']; $i++) {
        
    $cDate mktime(1,0,0$dStart[1], $dStart[2]+$i$dStart[0]);
        echo 
    date('d.m.Y (D)'$cDate), "
    \n"
    ;
    }
    ?>

    Einen Kommentar schreiben:

Lädt...
X