Tages-Preise für verschiedene Saison-Zeiträume mit PHP bestimmen

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

  • Tages-Preise für verschiedene Saison-Zeiträume mit PHP bestimmen

    Hallo zusammen,

    ich programmiere bereits seit geraumer Zeit an einem Formular zur Mietwagen-Buchung. Ziel ist es, dem Kunden nach dem Übermitteln von Start- und Enddatum eine Preisauskunft auf der nächsten Formularseite auszugeben.

    Der Preis ist dabei u.a. von der Anzahl der Miettage aber auch von 3 verschiedenen Saison-Zeiträumen abhängig.

    Die Anzahl der Tage habe ich über die mktime Funktion bestimmt.

    Es ließe sich auch noch recht einfach bestimmen in welcher Saison der Start- und Endtermin liegt. Was mir aber Kopfzebrechen bereitet ist, wie ich für jeden einzelnen Tag des gesamten Mietzeitraums bestimme, in welcher Saison er liegt. Ziel soll ja ein tagesgenaue Abrechnung sein, d.h. wenn jemand insgesamt 10 Tage bucht und 5 Tage davon in Saison1 und 5 in Saison2 liegen, soll der Gesamtpreis ((5*PreisSaison1)+(5*PreisSaison2)) ergeben.

    Glück im Unglück ist, dass die Saison nicht vom Jahr abhängt, sondern nur von Tag und Monat. Beispielsweise Sasion1: 1. Mai - 30. September (Jahr ist egal).

    Ich habe bereits einiges mit timestamp und date() versucht, allerdings hänge ich momentan fest.

    Daher meine Frage, ob es jemanden gibt der ein ähnliches Problem schon einmal gelöst hat bzw. eine bereits vorhandene Funktion zur Lösung kennt. Meine Recherchen waren leider nicht erfolgreich.

    Bin für jede Anregung dankbar.

  • #2
    zeig mal, was du bist jetzt hast.

    Kommentar


    • #3
      Re: Tages-Preise für verschiedene Saison-Zeiträume mit PHP bestimmen

      Original geschrieben von hawk_22
      d.h. wenn jemand insgesamt 10 Tage bucht und 5 Tage davon in Saison1 und 5 in Saison2 liegen, soll der Gesamtpreis ((5*PreisSaison1)+(5*PreisSaison2)) ergeben.
      da hast du dir die antwort doch schon selbst gegeben.

      leg eine db an mit den saisons.
      startdatum (date), enddatum (date), preis (int)

      dann musst du die einzelnen tage des mietzeitraumes durchlaufen und dir den preis holen.

      select preis from db where miettag between startdatum and enddatum;

      preis+= mysql_result;

      also ma so grob gesprochen
      **********
      arkos
      **********

      Kommentar


      • #4
        Re: Tages-Preise für verschiedene Saison-Zeiträume mit PHP bestimmen

        Ermittle, in welchem Interval das Startdatum liegt; ermittle, wie viele Tage es von dort bis zum Intervalende oder bis zum Enddatum sind (je nachdem, was früher kommt).
        Ermittle, ob das Enddatum im nächsten Interval liegt; wenn ja ermittle, wie vielen Tagen das entspricht.
        Ermittle, wie viele Tage es vom Beginn des letzten Intervals bis zum Enddatum sind.

        Wo man sinnvollerweise schon aussteigen kann aus der Berechnung, sollte ja wohl hoffentlich von selbst ersichtlich sein.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Re: Re: Tages-Preise für verschiedene Saison-Zeiträume mit PHP bestimmen

          Original geschrieben von arkos
          dann musst du die einzelnen tage des mietzeitraumes durchlaufen
          Das wäre die unperformantere Brachialmethode für Grobmathematiker.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Re: Re: Re: Tages-Preise für verschiedene Saison-Zeiträume mit PHP bestimmen

            Original geschrieben von wahsaga
            Das wäre die unperformantere Brachialmethode für Grobmathematiker.
            ging mir auch durch den kopf, als ich deinen beitrag gelesen habe. mag wohl sein, dass ich freitags ab 17.oo uhr zum grobmathematiker werde

            (auch wenn du recht hast, sollte eine mietwagen-firma nicht den benutzer-run haben, dass die performance-schwäche bös sichtbar wäre... )
            **********
            arkos
            **********

            Kommentar


            • #7
              das ging ja fix...

              nur zur info, das ganze läuft ohne sql-db. überprüfung erfolgt nur über php.

              mit bestimmung der anzahl tage im monat habe ich auch schon angefangen. bin dabei aber steckengeblieben.

              frage mich, ob es sinnvoller wäre die tage über einen timestamp zu ermitteln. allerdings müsste man das dann ja für mehrere jahre im voraus anlegen. auch nicht so schön.

              ich hoffe noch, dass es eine funktion zur bestimmung eines mietzeitraums bereits gibt. bevor ich mich noch weiter auf eigene faust verzettel.

              vielleicht ist freitag abend auch die luft raus. und die erleuchtung kommt übers we.

              Kommentar


              • #8
                @arkos

                das mit dem sql between wäre sehr nützlich. gibts aber bei php meines wissens nach so nicht.

                da müsste ich wohl über for schleifen und >< Operatoren agieren. Und bei jeder Übereinstimmung den Tageszähler um 1 erhöhen...davor drücke ich mich zugegebenermaßen grad noch.

                gibt es nicht auch in php eine möglichkeit einen Zeitraum zwischen einem end- und einem startdatum eindeutig zu bestimmen, ohne die ganze monats-tage-bestimmereie, schaltjahrprobleme usw.

                Kommentar


                • #9
                  timestamp wäre auch ne möglichkeit. zumindest kannst du da wesentlich einfach abfragen, ob ein tag dazwischen liegt.

                  zu deinem saison-"problem"... automatisier das

                  man kann kein auto in der vergangenheit anlegen. wenn also das enddatum einer saison in der vergangenheit liegt, häng es "hinten" wieder ran. es soll doch sicher nicht möglich sein, ein auto ein jahr im voraus zu buchen, oder??
                  **********
                  arkos
                  **********

                  Kommentar


                  • #10
                    Original geschrieben von hawk_22

                    gibt es nicht auch in php eine möglichkeit einen Zeitraum zwischen einem end- und einem startdatum eindeutig zu bestimmen, ohne die ganze monats-tage-bestimmereie, schaltjahrprobleme usw.
                    meines wissens nach tatsächlich nur mit nem timestamp und kleiner größer vergleich - was ja in dem sinne nichts anderes ist.

                    ha!!! BLITZIDEE!!! wenn die saisons immer fix (bsp saison 1 von 1.1. bis 31.3) sind, dann sche**ß doch aufs jahr. hinterleg da immer 2007 in der berechnung. also timestamp von xx.yy.2007 für die gebuchten tage sowie für die saisons.

                    du bräuchstest dann nur noch eine zweite config für schaltjahre...
                    **********
                    arkos
                    **********

                    Kommentar


                    • #11
                      das ist in der tat ne super idee. danke. das werde ich ausprobieren.

                      bezieht der timestamp nicht sogar automatisch auch schaltjahre mit ein. liefert doch soweit ich weiß sekundengenaue ergebnisse zwischen 1970 und 2038 zurück? oder hab ich das was falsch verstanden, mit deinem hinweis auf ne 2. config?

                      Kommentar


                      • #12
                        richtig, der timestamp beachtet das.

                        ABER... wenn du immer mit 2007 (is doch kein schaltjahr, oder) als fiktives jahr arbeitest, die BUCHUNG aber in einem schaltjahr (und dann noch ende februar) getätigt wird, kannst du ziemlich schnell ein falsches ergebnis einen falschen preis erhalten.

                        also:

                        wenn buchung im schaltjahr = fiktives schaltjahr zur ermittlung des timestamps

                        wenn buchung im normjahr = fiktives normjahr zur ermittlung des timestamps
                        **********
                        arkos
                        **********

                        Kommentar


                        • #13
                          ich habe jetzt die sasion start- und endzeitpunkte in timestamps festgelegt. dann prüfe ich ob der timestamp des eingegebenen startdatums und endatums im bereich der saisonzeiträume liegen und lasse mir jeweils den entsprechenden preis ausgeben.

                          das lüppt soweit auch.

                          wollte das erstmal soweit testen. was jetzt natürlich noch nicht berücksichtigt wird, ist wenn ein gebuchter zeitraum in verschiedene sasion-zeiträume fällt.

                          da noch ne idee?

                          wenn ich sowohl für die saison-timestamps als auch für die eingegebenen daten das jahr 2007 verwende, bekomme ich auch noch fehler beim jahreswechsel. z.B Input: 31.12.2007 bis 10.01.2008

                          in jedem fall hab ich noch was vergessen.

                          zum schaltjahr-problem: dein vorschlag klingt logisch, weißt du spontan auch wie man überprüfen kann ob ein schaltjahr eins ist (vielleicht: if Anzahl Tage im Februar=29 )

                          PS: 2007 ist kein Schaltjahr, aber 2008 schon.

                          Kommentar


                          • #14
                            zum schaltjahr ermitteln gibts fertige schnipsel (google: php schaltjahr )

                            PHP-Code:
                            <?php
                               
                            function schaltjahr($jahr) {
                                  if(
                            $jahr 400 == 0) {
                                     return 
                            "true";
                                  }
                                  elseif(
                            $jahr == && $jahr 100 != 0) {
                                     return 
                            "true";
                                  }
                                  else {
                                     return 
                            "false";
                                  }
                               }
                               echo 
                            "2000: ".schaltjahr(2000);
                               echo 
                            "<BR>";
                               echo 
                            "2003: ".schaltjahr(2003);
                            ?>

                            zum zeitraum über verschiedene saisons.
                            erstmal würde ich folgendes schauen. sind timestamp anfang und timestamp ende in der gleichen saison? wenn nein: dann den timestamp vom nächsten saisonanfang nehmen, und schauen, wieviel tage deines zeitraumes in dem sind. dann das gleiche mit der folgesaison u.s.w.

                            zum jahreswechsel: du kannst ja verdammt schnell abfragen, ob das end-jahr != startjahr ist. dem entsprechend generierst du für das folgejahr zusätzliche saison-timestamps für die sitzung (aber auch da die schaltjahr abfrage nicht vergessen).

                            wat schlaueres fällt mir nach einem kaffee um diese zeit nicht ein hoffe es klingt dennoch einigermaßen schlau - ansonsten möge wahsaga schimpfen
                            Zuletzt geändert von arkos; 28.07.2007, 10:55.
                            **********
                            arkos
                            **********

                            Kommentar


                            • #15
                              schaltjahre: date() + "L"

                              Kommentar

                              Lädt...
                              X