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

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

  • #16
    Hab soweit alles umgesetzt. Hänge aber immer noch bei dem Fall, dass Anmietdatum und Rückgabedatum nicht in der selben Sasion liegen. Vielleicht habt Ihr nen Vorschlag für eine Funktion, die die Summe der einzelnen Tage der verschiedenen Sasions zurückliefert. So dass mann dann den TotalPreis wie folgt ermitteln kann: (Anzahl der Tage der SaisonX * PreisX) + (Anzahl der Tage der SaisonY * PreisY) ... = Totalpreis

    Zum nachvollziehen habe ich mal die relevanten Passagen aus dem Quellcode eingefügt. Ich hoffe das macht das Problem klarer.

    PHP-Code:
    //changes the user date input into timestamp format (seconds);
    //mktime() works only between 1970 and 2038!!!
    $tdate1=mktime($pHour,$pMin,0,$month1,$day1,$year1);
    $tdate2=mktime($rHour,$rMin,0,$month2,$day2,$year2);
    $days=ceil(($tdate2-$tdate1)/86400);

    //determines the season periodes of time
    if ($year1==$year2)
    {
       
    $tstartLow=mktime(0,0,0,5,1,$year1); //low season from 1. May
       
    $tendLow=mktime(23,59,59,9,30,$year1); //to 30. Sep
    }
    else
    {
       
    $tstartLow=mktime(0,0,0,5,1,$year1); //low season from 1. May
       
    $tendLow=mktime(23,59,59,9,30,$year2); //to 30. Sep
    }

    //COSTS PER CAR MODELL
    //low season 10 days+
    if ($days>=10)
    {
       if ((
    $this->isSameSeason ($tdate1,$tdate2,$tstartLow,$tendLow)) 
    && (
    $this->isLowSeason($tdate1,$tdate2,$tstartLow,$tendLow)))
       {                  
          switch (
    $car
          {
             case 
    'Nissan March':    
             
    $pCarPerDay $pLow10_March;            
             
    $pCarTotal $pLow10_March*$days;
             break;
          } 
        } 


    function 
    isSameSeason($tdate1,$tdate2,$tstartLow,$tendLow)
    {
       if ((
    $tdate1>=$tstartLow)&&($tdate2<=$tendLow))
       return 
    true;
    }

    function 
    isLowSeason($tdate1,$tdate2,$tstartLow,$tendLow)
    {
       if ((
    $tdate1>=$tstartLow)&&($tdate2<=$tendLow))
       return 
    true;

    Zuletzt geändert von hawk_22; 30.07.2007, 17:37.

    Kommentar


    • #17
      niemand ne idee?

      Kommentar


      • #18
        Erst mal Regeln lesen, Code umbrechen.



        Und dann mal hier den dicken Logikfehler beseitigen:
        PHP-Code:
        //determines the season periodes of time
        if ($year1=$year2
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #19
          sorry, das mit den umbrüchen hatte ich vergessen. Habs geändert.

          zum logischen fehler: damit soll überprüft werden, ob das vom benutzer per input-feld eingegebene Anmiet- und Rückgabejahr identisch ist. damit soll vermieden werden, dass bei einem Anmietdatum im Vorjahr und einem Rückgabedatum im Folgejahr der timestamp falsch berechnet wird (nämlich dann nur mit dem Anmietjahr).

          Dass $year1 und $year2 vom user bestimmt wird, wurde aber aus dem code-auszug auch nicht deutlich. Sorry.

          Müsste doch so gehen, oder stehe ich auf dem Schlauch?

          Kommentar


          • #20
            guckst du hier

            gruß
            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #21
              Ok, hab das brett vor dem kopf gefunden. Das kommt davon, wenn man zu lange vor der kiste hängt.

              Danke für den Wink mit dem Zaunpfahl.

              Kommentar


              • #22
                allerdings geht es mir in erster linie darum eine clevere funktion zu erstellen, die auch für die zukunft zuverlässig die passende anzahl von tagen des jeweiligen mietzeitraums zurückgibt.

                ich habe nochmal weiter gebastelt, bin aber nicht wirklich damit zufrieden, da es soviele kombinationsmöglichkeiten gibt, die so abzudecken wären. Denkbar wären ja theoretisch auch fälle in denen nich nur saison 1 auf 2 folgt, sondern auch saison 1 auf 2 auf 3. Aber zu einem entsprechend umfassenderen Schleifen-Konstrukt ist mein Hirn noch nicht durchgedrungen.

                Test-Versuch:
                PHP-Code:
                if (($tdate1<$tendLow) && ($tdate2>$tendLow))
                {
                   
                $daysLow=ceil(($tendLow-$tdate1)/86400); 
                   
                $daysMid2=ceil(($tdate2-$tstartMid2)/86400);
                }

                switch (
                $car
                {
                   case 
                'Nissan March':                
                   
                $pCarPerDay $pLow10_March;            
                   
                $pCarTotal $pLow10_March*$daysLow+$pMid10_March*$daysMid1+
                   
                $pMid10_March*$daysMid2+$pPeak10_March*$daysPeak1+
                   
                $pPeak10_March*$daysPeak2;
                   break;

                Zuletzt geändert von hawk_22; 30.07.2007, 17:35.

                Kommentar

                Lädt...
                X