Preis aus verschieden Saisonzeiten

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

  • Preis aus verschieden Saisonzeiten

    Hallo PHP-Profis,

    ich habe folgendes Problem!
    In meinem Script möchte ich für eine Ferienwohnung verschiedene Saisonzeiten hinterlegen.
    Nun möchte ich den Preis pro Person sowie den Gesamtpreis ermitteln.

    Preis pro Person pro Tag:
    Saison A = 01.01.06 bis 10.03.06
    1 Pers. im Zimmer = 35.- EUR
    2 Pers. im Zimmer = 18.- EUR
    3 Pers. im Zimmer = 14.- EUR
    4 Pers. Im Zimmer = 12.- EUR
    Saison B = 11.03.06 bis 31.07.06
    1 Pers. im Zimmer = 30.- EUR
    2 Pers. im Zimmer = 16.- EUR
    3 Pers. im Zimmer = 12.- EUR
    4 Pers. im Zimmer = 09.- EUR

    In meinem Script ermittle ich den Timestamp für das Aufenthaltsdatum wie folgt:
    $arr_stamp = "28.02.06";
    $dep_stamp = "17.03.06";
    list($day1,$month1,$year1)=explode(".",$arr_stamp);
    list($day2,$month2,$year2)=explode(".",$dep_stamp);
    //Timestamp ermitteln
    $t_arr_stamp=mktime(0,0,0,$month1,$day1,$year1);
    $t_dep_stamp=mktime(0,0,0,$month2,$day2,$year2);
    //Gesamt-Tage
    $diffdays=round(($t_dep_stamp-$t_arr_stamp)/86400);

    Ankunft-Timestamp = „1141081200“
    Abreise-Timestamp = „1142550000“
    (Aufenthalt = 17 Nächte)

    Ab hier komme ich nicht weiter und brauche Hilfe!
    Wie kann ich nun aus meinen Daten (Ankunft, Abreise und Personenanzahl) einen Endpreis ermitteln?

    Vielen Dank für eure detaillierte Hilfe!

    Mit freundlichen Grüßen
    ThoRei

  • #2
    Hinterleg deine Saison Daten in einem Array

    Dann kannst du mit der Funktion in_array() ermitteln in welcher Saison der Gast an bzw abreist.

    Momentan wüsste ich auch nicht wozu du nen Timestamp benötigst.
    gruss Chris

    [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

    Kommentar


    • #3
      Kannst du auch mal deine Datenbank posten? Du verwendest doch eine, oder etwa nicht?
      Wenn nicht, kann ich dir heute Nachmittag mal einen Vorschlag machen...
      Ich möchte ein Tutorial über ein dynamisches Rechtemanagement-System schreiben (mit Rechtevererbung). Suche nach Freiwilligen! -> php_jan@freenet.de

      Kommentar


      • #4
        Du musst nur noch Datum prüfen und checken, wieviel Tage die Reise in der A Saison verbrahct wurde und wieviel in der B Saison.
        Danach sowas ähnliches:

        $preis_arr1=array("35","18","14","12");
        $preis_arr2=array("30","16","13","09");
        $einzelpreis=$preis_arr1[$pers_zahl-1]*$dauer_a_saison+$preis_arr2[$pers_zahl-1]*$dauer_b_saison;
        $gespreis=$einzelpreis*$pers_zahl;

        Ich hoffe, ich hab da nicht zuvele Logikfehler eingebaut

        Kommentar


        • #5
          Hallo und DANKE für die Beiträge bzw. Hilfe.

          >>Antwort von: hhcm
          >>Hinterleg deine Saison Daten in einem Array
          Die Daten in einem Array hinterlegen? OK! Wie werden Sie dann verarbeitet?

          >>Antwort von: php_jan
          >>Kannst du auch mal deine Datenbank posten?
          Leider ist keine Datenbank vorhanden! Die Preise der jeweiligen Saisonzeiten müssen in die selbe Datei mit rein!

          >>Antwort von: archie
          >>Du musst nur noch Datum prüfen und checken, wieviel Tage in Saison A ...
          Die Preise der jeweiligen Saison wie auch schon von "hhcm" vorgeschlagen in einem Array hinterlegen! OK! Wie kann ich nun die Tage der jeweiligen Saison zu meinem Reisezeitraum ermitteln?

          MfG
          ThoRei

          Kommentar


          • #6
            Die eigentliche Lösung habe ich schon gepostet.
            Rest ist eigentlich, in die Richtugn, wie du angefangen hast. mit mktime.
            Ein wenig logisches Denken, gehört zum Programmieren dazu
            Jetzt muss du überlegen, wie man das Mathematisch lösen könnte und das dann umsetzen. Wenn mr heute auf der Arbeit zu langweilig wird, werd ich das Denken übernehmen.

            Kommentar


            • #7
              So, bin mir nicht sicher, ob es funktioniert (kann hier nicht testen)
              Aber es repräsentiert eine mögliche Lösung:

              PHP-Code:
              int $tagdauer=86400;
              int $tag=1;
              int $dauer_a_saison=0;
              int $dauer_b_saison=0;
              $s_a_s=(int)(mktime(0,0,0,01,01,06));
              $s_a_e=(int)(mktime(0,0,0,03,10,06));

              $s_b_s=(int)(mktime(0,0,0,03,11,06));
              $s_b_e=(int)(mktime(0,0,0,07,31,06));

              $abreise=(int) (mktime(0,0,0,$month_abreise,$tag_abreise,$year_abreise));
              $anreise=(int) (mktime(0,0,0,$month_anreise,$tag_anreise,$year_anreise));
              $ges_dauer=($abreise-$anreise)/$tagdauer;



              for(
              $i=0$i<=$ges_dauer$i++)
              {

              if(
              $tag>$s_a_s && $tag<$s_a_e)    { $dauer_a_saison++; }
              if(
              $tag>$s_b_s && $tag<$s_b_e)    { $dauer_b_saison++; }
              $tag=$anreise+$tagdauer;

              }

              $preis_arr1=array("35","18","14","12");
              $preis_arr2=array("30","16","13","09");
              $einzelpreis=$preis_arr1[$pers_zahl-1]*$dauer_a_saison+$preis_arr2[$pers_zahl-1]*$dauer_b_saison;
              $gespreis=$einzelpreis*$pers_zahl
              Hoffe, dass da logisch alles stimmt
              Sonst muss ich mich schämen
              PS: Würde mich interessieren, ob du es hinbekommen hast.
              Zuletzt geändert von archie; 07.12.2005, 15:54.

              Kommentar


              • #8
                Hallo archie,

                danke für deine Hilfe!
                Leider bin ich kein Programmierer weshalb ich mit dem "logisches PHP-Denken" etwas Probleme habe. Ich möchte jedoch die einfachen PHP-Scripte verstehen weshalb ich gerne noch etwas mehr Infos hätte.
                Meine Ausgangsdaten waren:
                $arr_stamp = "28.02.06"; // Anreise
                $dep_stamp = "17.03.06"; // Abreise

                Dein Script!
                """"""""""""""
                (int) $tagdauer=86400; // OK!
                (int) $tag=1; //OK!
                (int) $dauer_a_saison=0; //OK!
                (int) $dauer_b_saison=0; //OK!
                $s_a_s=(int)(mktime(0,0,0,01,01,06)); // Saison A Start - OK!
                $s_a_e=(int)(mktime(0,0,0,03,10,06)); // Saison B Ende - OK!

                $s_b_s=(int)(mktime(0,0,0,03,11,06)); // Saison B Start - OK!
                $s_b_e=(int)(mktime(0,0,0,07,31,06)); // Saison B Ende - OK!

                //An- und Abreisedaten ermitteln!
                //Die Variablen sind leer ($month_abreise,$tag_abreise,$year_abreise)!
                $abreise=(int) (mktime(0,0,0,$month_abreise,$tag_abreise,$year_abreise));
                $anreise=(int) (mktime(0,0,0,$month_anreise,$tag_anreise,$year_anreise));
                $ges_dauer=($abreise-$anreise)/$tagdauer;

                //OK!
                for($i=0; $i<=$ges_dauer; $i++)
                {
                if($tag>$s_a_s && $tag<$s_a_e) //OK!
                {
                $dauer_a_saison++;
                }
                if($tag>$s_b_s && $tag<$s_b_e) //OK!
                {
                $dauer_b_saison++;
                }
                $tag=$anreise+$tagdauer;
                }

                $preis_arr1=array("35","18","14","12"); // Preise der Saison A in einem Array
                $preis_arr2=array("30","16","13","09"); // Preise der Saison B in einem Array

                //Was ist [$pers_zahl-1]? Verstehe ich nicht!
                //Als Anfänger ist für mich das Array "$preis_arr1=array("35","18","14","12")" ein
                //Indiziertes Array!
                $einzelpreis=$preis_arr1[$pers_zahl-1]*$dauer_a_saison+$preis_arr2[$pers_zahl-1]*$dauer_b_saison;
                $gespreis=$einzelpreis*$pers_zahl;

                Ich hoffe Du hilfst mir weiter!
                Für deine Erläuterungen bzw. weitere Hilfe schon mal vorab ein DANKESCHÖN!

                MfG
                ThoRei

                Kommentar


                • #9
                  Auf so ein einfaches Array greift man z.B mit

                  $array[0] oder $array[4] zu... 0 ist der erste Wert.. Deine Personenanzahl fängt aber bei 1 an.. Darum $pers_anzahl-1

                  EDIT:


                  Benutz mal die PHP Tags dieses Forums damit man das besser lesen kann.


                  gruss Chris

                  [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                  Kommentar


                  • #10
                    Ja ich helfe doch immer gerne
                    wie hhcm schon gesagt hat, ein Arra beginnt mit dem index 0. Da du keine Null-Personen hast, muss die Stelle um "1" nach hinter vorgerückt werden.

                    Du has ein Preisarray:
                    $preis_arr1=array("35","18","14","12");

                    3 Personen machen Urlaub:
                    -> 14 €/Person

                    Preis für 3 Personen:
                    -> $preis_arr1[3-1] damit greifst du auf "3te" Stelle des Arrays:
                    $preis_arr1=array("35","18","[COLOR=blue]14[/COLOR] ","12");
                    Stelle 0: 35
                    Stelle 1: 18
                    usw
                    Zuletzt geändert von archie; 08.12.2005, 14:05.

                    Kommentar


                    • #11
                      Hallo archie,

                      vielen Dank! Das mit dem Array ist nun logisch!
                      Leider habe ich noch Bugs im Testlauf festgestellt!

                      1.
                      Bei Überschneidung der Saisonzeit z.B. vom 10.03 auf den 11.03 ist der Preis 0.- EUR (Der Preis müsste 36.- EUR sein sowie 18.- EUR pro Person)
                      2.
                      Bei einer Überschneidung der Saisonzeit z.B. vom 08.03 bis 12.03 ist der Preis laut Script bei 144.- EUR sowie 72.- EUR pro Person. Korrekt wäre 136.- EUR und 68.- EUR. (Der Preis wurde kpl. aus der Saison A berechnet!)

                      So ist dein Script bei mir im Einsatz:
                      (int) $tagdauer=86400;
                      (int) $tag=1;
                      (int) $dauer_a_saison=0;
                      (int) $dauer_b_saison=0;

                      $season_a_start= (int)(mktime(0,0,0,11,01,05));
                      $season_a_ende = (int)(mktime(0,0,0,03,10,06));

                      $season_b_start= (int)(mktime(0,0,0,03,11,06));
                      $season_b_ende = (int)(mktime(0,0,0,07,31,06));

                      $preis_arr1=array("35","18","14","12"); //PREISE FUER SAISON A
                      $preis_arr2=array("30","16","13","09"); //PREISE FUER SAISON B

                      list($tag_anreise,$month_anreise,$year_anreise)=explode(".",$HTTP_POST_VARS[arrival]);
                      list($tag_abreise,$month_abreise,$year_abreise)=explode(".",$HTTP_POST_VARS[departure]);
                      $abreise = (int)(mktime(0,0,0,$month_abreise,$tag_abreise,$year_abreise));
                      $anreise = (int)(mktime(0,0,0,$month_anreise,$tag_anreise,$year_anreise));
                      $ges_dauer=($abreise-$anreise)/$tagdauer;
                      print "complete stay"." $ges_dauer"; if($ges_dauer == 1)
                      {
                      print " day";
                      }
                      else
                      {
                      print " days";
                      };
                      for($i=0; $i<=$ges_dauer; $i++)
                      {
                      if($tag >= $season_a_start && $tag <= $season_a_ende)
                      {
                      $dauer_a_saison++;
                      }
                      if($tag >= $season_b_start && $tag <= $season_b_ende)
                      {
                      $dauer_b_saison++;
                      }
                      $tag=$anreise+$tagdauer;
                      }

                      $einzelpreis=$preis_arr1[$HTTP_POST_VARS[adt]-1]*$dauer_a_saison+$preis_arr2[$HTTP_POST_VARS[adt]-1]*$dauer_b_saison;
                      $gespreis=$einzelpreis*$HTTP_POST_VARS[adt];
                      print "total price"." $gespreis"." EUR";
                      print "<br>";
                      print "unit price"." $einzelpreis"." EUR";

                      Wenn ich bei der if-Bedingung in der for Schleife >= und auch <= einbaue, erhalte ich bei Bug 1 den korrekten Preis! Jedoch bleibt Bug 2 weiterhin bestehen!
                      Wo ist der Fehler bzw. welcher Weg führt nach Rom :-) (?)

                      Vielen Dank

                      MfG
                      ThoRei

                      Kommentar


                      • #12
                        Das war auch keine Garantie, dass es richtig funzt, sondern ein Ansatz
                        Ich werds mir evtl morgen angucken, da ich nach 2 Bier keine Konzentration habe.

                        Kommentar


                        • #13
                          Hmm ja schon klar, dass man <= zu verwenden hat
                          144.- EUR sowie 72. Anscheinend für 4 Tage (2 Personen) in der Saison A.
                          Anscheinend stimmt da was mit $ges_dauer nicht.

                          $ges_dauer=($abreise-$anreise)/$tagdauer;

                          mo->0
                          di->1
                          mi->2
                          do->3
                          fr->4

                          4-0 !=5 , obwohl das 5 Tage sind

                          Das sind immer solche Kleinigkeiten, die nicht sofort auffallen. Bzw. ich weiss noch nicht genau, wie das alles bewirtschaftet wird?
                          Wenn jemand montag um 10:00 angekommen ist und fährt dienstag um 10:00 das wird doch, wie ein Tag gezählt oder? Oder man ist Montags um 10:00 da und Freitags fährt man weg, zahlt man für Freitag noch?

                          Kommentar

                          Lädt...
                          X