Ankündigung

Einklappen
Keine Ankündigung bisher.

Öffnungszeiten- uhrzeit in schleife erhöhen

Einklappen

Neue Werbung 2019

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

  • Öffnungszeiten- uhrzeit in schleife erhöhen

    Hallo Ihr Lieben,

    ich habe folgendes problem: Ich bin dabei eine Seite zu basteln, die mehrere onlineshops binhaltet. Jeder Shop hat eigene Öffnungszeiten die evtl. auch eine Mittagspause haben kann.

    Der Besteller soll nun seine Bestellung zu einer Zeit nach seinem Wunsch abholen können. Dies muss er aber per Select vorher angeben.

    Bsp.: ein Shop hat von 9:30 Uhr - 13:30 auf und von 18:00 Uhr - 22 Uhr.
    Der Shop kann aber auch von 10:00 Uhr - 23:00 oder von 9:00 - 04:00 Uhr offen haben. Es gibt also verschiedene Variationsmöglichkeiten.

    Jetzt soll dem Besteller in einer Selectliste die Uhrzeiten im 15 min. Takt angezeigt werden.
    Also 9:30, 9:45, 10:00 usw...

    Wie kann ich das lösen?
    Vielen Dank im Voraus

  • #2
    1. Punkt die Daten richtig abspeichern. (Das Thema Öffnungszeiten wurde hier schon mal ausführlich behandelt: http://www.php.de/php-einsteiger/107...erstellen.html)
    2. Wie du schon sagtest eine Zeit per Schleife ausgeben.
    [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
    [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

    Kommentar


    • #3
      Die Uhrzeiten bekomme ich für jeden Tag seperat mit jeweils mögl. Vormittags und Nachmittagszeit oder durchgehend. Das Problem ist nur wenn der shop noch nach 00:00 auf hat.

      Kommentar


      • #4
        Zitat von asher81 Beitrag anzeigen
        Die Uhrzeiten bekomme ich für jeden Tag seperat mit jeweils mögl. Vormittags und Nachmittagszeit oder durchgehend. Das Problem ist nur wenn der shop noch nach 00:00 auf hat.
        Was ist daran das Problem?

        Kommentar


        • #5
          ich bekomme die entsprechende for- Schleife dafür nicht hin
          ich hab ein Script, das ellen Lang ist und nicht funktioniert wenn der shop bis 03:00 Uhr auf hat, obwohl es bestimmt einen kürzeren Weg gibt die uhrzeiten korrekt auszugeben.

          Kommentar


          • #6
            spontan würde ich versuchen das du evtl 03:00 morgens als 27:00 "umrechnest".. also sozusagen 24 stunden für den einen tag und dann halt die 3 stunden noch oben drauf.. musste halt entsprechend überall umrechnen dann.

            Kommentar


            • #7
              Vllt. wäre es für diesen Fall auch gut, statt "von" bis in der DB "von" Dauer abzuspeichern.

              In jeden Fall ist
              ein Script, das ellen Lang ist
              eine deutliche Aussage, dass hier mal ein bisschen restrukturiert werden muss. (Stichworte: Funktionen, Klassen, Code auf mehrere Dateien aufteilen)
              [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
              [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

              Kommentar


              • #8
                Würde an die Sache mit DateTime gehen. Dort fällt es einem einfach einzelne Bausteine individuell zu handhaben und auch via modify() Stunden hinzuzuzählen. Dort wird dann automatisch von 23:00 auf 0:00 umgeschalten.

                Kommentar


                • #9
                  Ich bin gespannt ob du clever genug bist.

                  PHP-Code:
                  <?php

                  $options 
                  array_map(function(DateTime $in) {
                      return 
                  '<option value="'.$in->format('H:i').'">'.$in->format('H:i').'</option>';
                  }, 
                  iterator_to_array(
                          new 
                  DatePeriod(
                              
                  date_create('today 08:00:00', new DateTimeZone('europe/berlin')), 
                              
                  DateInterval::createFromDateString('+15 minutes'), 
                              
                  date_create('today 18:00:00', new DateTimeZone('europe/berlin'))->modify('+1 second')
                          )
                      )
                  );

                  echo 
                  '<select name="foo">'.PHP_EOL.join(PHP_EOL$options).PHP_EOL.'</select>';
                  [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                  Kommentar


                  • #10
                    Die Uhrzeiten bekomme ich für jeden Tag seperat mit jeweils mögl. Vormittags und Nachmittagszeit oder durchgehend. Das Problem ist nur wenn der shop noch nach 00:00 auf hat.

                    Wenn die aktuelle Uhrzeit vor der frühestmöglichen Öffnungszeit liegt musst Du gegen die letztmögliche Öffnungszeit vom Vortag prüfen, wenn diese die folgende Bedingung erfüllt "von_stunden > bis_stunden". Dabei musst Du auch Feiertage, Ferien und evtl. Sonderöffnungszeiten sowohl bei der Ermittlung der Öffnungszeiten vom Vortag als auch vom akt. Tag natürlich mit einbeziehen.

                    Alternative Nr.2 wäre, Du legst eine frühestmögliche Öffnungszeit für alle Shops fest und setzt vor dieser Uhrzeit den Current-Timestamp um einen Tag zurück. Der Vorteil dieser Methode ist, daß Du nur gegen die Öffnungszeiten eines Tages prüfen musst, somit musst Du die Prüfungen für Ferien, Feiertage etc. nur auf ein Datum anwenden. Der Nachteil ist die feste Konstante für frühestmögliche Öffnungszeit für aller Shops. Dies dürfte in der Praxis bei dieser Art Shops jedoch keine Rolle spielen.

                    Das Problem ist nur wenn der shop noch nach 00:00 auf hat.
                    Bezogen auf die reine Darstellung der Öffungszeiten innerhalb der SelectList könnte man die Implementierung von troy z.B. wie folgt ergänzen:

                    PHP-Code:
                    <?php

                    $oeffnungszeiten 
                    = array();
                    $oeffnungszeiten[] = array('von' => '10:30:00''bis' => '16:00:00');
                    $oeffnungszeiten[] = array('von' => '17:30:00''bis' => '02:00:00');

                    $options = array();

                    foreach(
                    $oeffnungszeiten as $oeffnungszeit) {
                        
                    $von date_create('today '.$oeffnungszeit['von'], new DateTimeZone('Europe/Berlin'));
                        
                    $bis date_create('today '.$oeffnungszeit['bis'], new DateTimeZone('Europe/Berlin'));
                        
                    $bis = ($von->format('G') > $bis->format('G')) ? $bis->modify('+1 day') : $bis;

                        
                    $options array_merge($options,array_map(function(DateTime $in) {
                                return 
                    '<option value="'.$in->format('H:i').'">'.$in->format('H:i').'</option>';
                            }, 
                    iterator_to_array(
                                new 
                    DatePeriod(
                                    
                    $von,
                                    
                    DateInterval::createFromDateString('+15 minutes'),
                                    
                    $bis->modify('+1 second')
                                )
                            )
                        ));
                    }

                    echo 
                    '<select name="foo">'.PHP_EOL.join(PHP_EOL$options).PHP_EOL.'</select>';
                    vg
                    jack
                    -

                    Kommentar

                    Lädt...
                    X