Ankündigung

Einklappen
Keine Ankündigung bisher.

Schleife für Öffnungszeiten

Einklappen

Neue Werbung 2019

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

  • Schleife für Öffnungszeiten

    Hallo liebes Forum,

    ich versuche derzeit eine Ausgabe von Lieferzeiten zu programmieren und komme einfach nicht weiter. Die Funktion ist mittlerweile so komplex geworden, dass ich den überblick verliere. Ich hoffe, dass mir einer von euch weiterhelfen kann.

    Zum Problem:
    Ich habe mehrere Shops auf einer Seite mit unterschiedlichen Lieferzeiten. Die Lieferzeiten können folgendermaßen aussehen:
    11.30 -16.00 & 18.00-20.00 Uhr
    11.45-22.00 Uhr
    9.30 - 03.45 Uhr
    8.30 - 12.45 & 14.40 - 04.00

    Es gibt also 4 verschiedene möglichkeiten.

    ich möchte nun das meine Funktion die derzeitige Uhrzeit nimmt und prüft,
    zu welchen Zeiten geliefert werden kann. Dabei soll sich die Uhrzeit um 15 min erhöhen. zu den Beginnzeiten sollen jeweils 30min addiert werden.

    Bsp.:
    11.30 -16.00 & 18.00-20.00 Uhr
    12.00, 12.15, 12.30, 12.45, 13.00, ....15.45, 16.00 & 18.30, 18.45, 19.00 usw.

    Was bisher geschah:

    PHP-Code:
    $minutes=array('00','15','30','45');    
    // $t= Stunde
    //$k= Minute
    for ($h=$t$h <= $ende_h$h++) {
                   
            if(
    $h>=24){                  // Lieferzeit liegt in der Nacht
                
    $p=$h-24;
            }else{
                
    $p=$h;
            }

            if(
    $begin2_h!=&& $h==$ende1_h){      // letzte Stunde 1.Lieferzeit - erste Stunde 2.Lieferzeit

                
    if($k<=$ende1_m){
                    for (
    $m=0$m<=3$m++) {
                        if(
    $minutes[$m]<=$ende1_m){                    
                        
    $time[]=$p.':'.$minutes[$m];
                        }
                    }
                }
                
                
    // erhöhen bis erste Stunde 2.Lieferzeit
                
    for ($z=$h$z<$begin2_h$z++) {
                    
    $p++;
                    
    $h++;
                }    
                
            }else if(
    $begin2_h!=&& $h>$ende1_h && $h<$begin2_h){
                
                
    // erhöhen bis erste Stunde 2.Lieferzeit
                
    for ($z=$h$z<=$begin2_h$z++) {
                    
    $p++;
                    
    $h++;
                }
                
            }
        
        if((
    $h==$t) && (($h!=$begin1_h) && ($h!=$begin2_h) && ($h!=$ende_h) && ($h!=$ende1_h))){                                    // erste Stunde 1.Lieferzeit
            
    if($begin1_m<=45){
                for (
    $m=0$m<=3$m++) {
                    if(
    $minutes[$m]>=$begin1_m){                    
                    
    $time[]=$p.':'.$minutes[$m];
                    }
                }
            }else{
                
    $p++;    
                
    $k=0;        
            }
        
        }else if(
    $h==$ende_h){                         //letzte Stunde 1.Lieferzeit
        
            
    for ($m=0$m <=3$m++) {
                if(
    $minutes[$m]<=$ende_m){                    
                
    $time[]=$p.':'.$minutes[$m];
                }
            }
        }else if(
    $begin2_h!=&& $h==$begin2_h){   // erste Stunde 2.Lieferzeit 
        
            
    $begin2_m=$begin2_m+30;
            if(
    $begin2_m>=60){
              
    $begin2_m=$begin2_m-60;
              
    $p++;
              
    $h++;
              }
        
        
            for (
    $m=0$m<=3$m++) {
                if(
    $minutes[$m]>=$begin2_m){                    
                
    $time[]=$p.':'.$minutes[$m];
                }
            }
            
            
        }else{
            for (
    $m=0$m<=3$m++) {
            
    $time[]=$p.':'.$minutes[$m];
            }    
        }
    }
    return 
    $time
    Das geht bestimmt viiiiel einfacher, weiß nur nicht wie....
    Bitte um dringeeeeeende HILFEEEEEEEe


  • #2
    Anstatt dort selbst mit Minuten und Stunden rumzueiern wäre es sicher einfacher, nen DateTime zu nehmen. Damit kannst du erstens einfacher die Zeiten erhöhen (add bzw. modify) und auch einfacher mit Endzeitpunkt vergleichen.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Ich verstehe das Missionsziel leider nicht. Was sind das für Lieferzeiten? Was passiert da?
      Standards - Best Practices - AwesomePHP - Guideline für WebApps

      Kommentar


      • #4
        Hallo,

        Ziel ist es wie oben beschrieben eine Auswahlliste mit Zeiten auszugeben, die jedoch innerhalb der Lieferzeiten liegen.

        Lieferzeiten sind z.B :11.30 -16.00 & 18.00-20.00 Uhr

        Ausgabe ist:
        12.00 Uhr
        12.15 Uhr
        12.30 Uhr
        12.45 Uhr
        13.00 Uhr
        ...
        15.45 Uhr
        16.00 Uhr

        &

        18.30 Uhr
        18.45 Uhr
        19.00 Uhr
        usw.

        Kommentar


        • #5
          Die Frage zu wiederholen hat mit erklären nichts zu tun. Habs auch nicht verstanden. Vor allem den Teil

          ch habe mehrere Shops auf einer Seite mit unterschiedlichen Lieferzeiten. Die Lieferzeiten können folgendermaßen aussehen:
          11.30 -16.00 & 18.00-20.00 Uhr
          11.45-22.00 Uhr
          9.30 - 03.45 Uhr
          8.30 - 12.45 & 14.40 - 04.00
          Definier erst mal in welcher Struktur die Daten vorliegen. Sicher nicht als String "11.30 -16.00 & 18.00-20.00 Uhr" oder wat?
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Hallo Nikosch,

            doch, sie liegen als String in serialiserter Form in der Datenbank. Da es zu jedem Tag unterschiedliche Lieferzeiten gibt.

            begin_1 = Anfang 1. Lieferzeit
            end_1 = Ende 1. Lieferzeit
            begin_2 = Anfang 2. Lieferzeit
            end_2 = Ende 2. Lieferzeit


            Zitat von nikosch Beitrag anzeigen
            Die Frage zu wiederholen hat mit erklären nichts zu tun. Habs auch nicht verstanden. Vor allem den Teil



            Definier erst mal in welcher Struktur die Daten vorliegen. Sicher nicht als String "11.30 -16.00 & 18.00-20.00 Uhr" oder wat?

            Kommentar


            • #7
              Zitat von tkausl Beitrag anzeigen
              Anstatt dort selbst mit Minuten und Stunden rumzueiern wäre es sicher einfacher, nen DateTime zu nehmen. Damit kannst du erstens einfacher die Zeiten erhöhen (add bzw. modify) und auch einfacher mit Endzeitpunkt vergleichen.
              Nicht Ignorieren.
              Auch in der Datenbank kannst du ein TIME nutzen, jeweils für den Start- und Endzeitpunkt. Mit etwas Glück kann dir dann sogar die Datenbank die Liste basteln, zumindest mit postgres (akretschmer hat da ein paar Tricks)
              Zitat von nikosch
              Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

              Kommentar


              • #8
                Das Problem ist leider, dass ne Änderung der Datenbankeinträge bzw. der Datenstrukturen auch zur Folge hätte, dass an vielen unterschiedlichen Stellen der Seite, wo die Daten genutzt werden, weitere umprogrammierungen stattfinden müssten. Dies wäre Wochenlange Arbeit. Das können wir uns nicht leisten. Es wird sicherlich auch hierfür eine Lösung geben.

                Zitat von tkausl Beitrag anzeigen
                Nicht Ignorieren.
                Auch in der Datenbank kannst du ein TIME nutzen, jeweils für den Start- und Endzeitpunkt. Mit etwas Glück kann dir dann sogar die Datenbank die Liste basteln, zumindest mit postgres (akretschmer hat da ein paar Tricks)

                Kommentar


                • #9
                  Workarounds waren noch nie gut, vorallem wenn auch an anderen Stellen Daten im falschen Format gespeichert werden. Am besten gleich Normalisieren, dann hat man nachher weniger Arbeit.

                  Zumindest das mit dem DateTime kannst du mal versuchen.
                  Zitat von nikosch
                  Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                  Kommentar


                  • #10
                    in serialiserter Form in der Datenbank.
                    Und was soll das wiederum bedeuten?
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      http://php.net/manual/de/function.serialize.php

                      Zitat von nikosch Beitrag anzeigen
                      Und was soll das wiederum bedeuten?

                      Kommentar


                      • #12
                        Man nu lass Dir nicht alles aus der Nase ziehen. Das ist wirklich ätzend. Was wurde serialisiert? Ein Objekt, ein String oder was? Und vor allem: Warum, wenn Du doch alles in einzelnen Feldern speicherst?
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          Ich versuche es dir doch zu erklären, die kompletten Lieferzeiten von Montag - Sonntag mit den jeweiligen Uhrzeiten sind in einem Feld serialisiert gespeichert.
                          Ich hole mir die einzelnen Uhrzeiten zu dem jeweiligen Tag aus diesem serialisierten "String" so heraus:

                          PHP-Code:
                          $end_schedule_1=unserialize($shopSettings['end_schedule_1']);
                          $begin_schedule_1=unserialize($shopSettings['begin_schedule_1']);
                          $begin_schedule_2=unserialize($shopSettings['begin_schedule_2']);
                          $end_schedule_2=unserialize($shopSettings['end_schedule_2']);



                          $begin_schedule_1[$dayOfWeek]['hour']
                          $begin_schedule_1[$dayOfWeek]['minutes']

                          $end_schedule_1[$dayOfWeek]['hour']
                          $end_schedule_1[$dayOfWeek]['minutes']

                          $begin_schedule_2[$dayOfWeek]['hour']
                          $begin_schedule_2[$dayOfWeek]['minutes']

                          $end_schedule_2[$dayOfWeek]['hour']
                          $end_schedule_2[$dayOfWeek]['minutes'
                          Wichtiger ist doch wie ich die Zeiten später vorliegend habe... und die habe ich in der eben genannten Form vorliegen. Ich muss mit diesen Daten arbeiten anders geht es zurzeit einfach nicht, es sei denn es gibt ein workaround.

                          Zitat von nikosch Beitrag anzeigen
                          Man nu lass Dir nicht alles aus der Nase ziehen. Das ist wirklich ätzend. Was wurde serialisiert? Ein Objekt, ein String oder was? Und vor allem: Warum, wenn Du doch alles in einzelnen Feldern speicherst?

                          Kommentar


                          • #14
                            Ich bin raus/
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #15
                              Zitat von asher81 Beitrag anzeigen
                              und die habe ich in der eben genannten Form vorliegen.
                              Welche? Ich seh nur deine ungenauen Angaben im ersten Beitrag aka Thread und deinen Sourcecode den ich mich weigere zu lesen.

                              Nochmal:
                              Zitat von tkausl Beitrag anzeigen
                              Anstatt dort selbst mit Minuten und Stunden rumzueiern wäre es sicher einfacher, nen DateTime zu nehmen. Damit kannst du erstens einfacher die Zeiten erhöhen (add bzw. modify) und auch einfacher mit Endzeitpunkt vergleichen.
                              Wenn du an der Datenbank nichts ändern kannst dann sieh zu, dass du die Daten ins Datetime-Format konvertiert bekommst, dann können wir hier weiter machen.
                              Zitat von nikosch
                              Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                              Kommentar

                              Lädt...
                              X