Ankündigung

Einklappen
Keine Ankündigung bisher.

tage in zeitraum - saisonpreisberechnung

Einklappen

Neue Werbung 2019

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

  • tage in zeitraum - saisonpreisberechnung

    Hi,
    im rahmen eines buchungsprojektes muss ich berechnen wieviele nächte eines gegeben aufenhaltes z.b. 1.2.08 - 14.2.08 innerhalb bestimmter tarifbereiche (saisonpreise) liegen. Z.B. saison 1 = 1.1. - 5.2.; saison 2 = 6.2. - 31.12.
    Problem dabei ist das die saison ja keine jahreszahl hat/braucht und ich nicht weiss wie ich das am besten umsetze.
    besonders der zeitraum um neujahr (aufenhalt vom 24.12.07 - 10.1.0 macht mir sorgen.

    Ich wäre dankbar wenn mich jemand in die richtige richtung weisen würde wie man sowas am besten angeht...

    Dennis

  • #2
    Hallo Dennis, schau dir das hier mal an: FAQ der Newsgroups de.comp.lang.php.* - 14.3.*Wie kann ich die Anzahl der Tage zwischen zwei Daten bestimmen? Damit berechnest Du dann für die jeweiligen Länge der Saison (in Tagen) für die Jahre, in der die jeweils zu berechnenden Übernachtungen liegen.

    Kommentar


    • #3
      Hallo Denis,
      ich stehe hier vor dem selben Problem. Gibt es hierfür eine Lösung? Ich weiß nicht, wie ich die Tage eines vorgegebenen Zeitraums vorgegebenen Perioden zuweisen kann. Ich wäre dankbar über einige Hinweise.

      Tobias

      Kommentar


      • #4
        Hallo, willkommen im Forum

        Wie liegen deine Perioden denn vor, hast du die Speicherung in der DB dafür bereits abgeschlossen?

        Du musst einen gegebenen Zeitraum (Buchung) eben mit allen Perioden vergleichen. Eine Überschneidung ist dabei anhand der jeweiligen Anfangs- und Endzeitpunkte relativ einfach möglich. Dabei musst du prüfen, ob die Buchung vor oder zeitlich nach einer Periode liegt (also nicht relevant ist) oder ob sie diese schneidet, in ihr vorkommt oder sie ganz oder über die Grenzen hinaus überlappt.

        Die Jahreswechselprüfung (Jahreszahlunabhängig) musst du gesondert durchführen.

        Welche Lösung strebst du an? Datenbankseitig oder über die Anwendung?
        "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

        Kommentar


        • #5
          Hallo Chriz,

          vielen Dank für die schnelle Antwort!

          Im Moment habe ich die Perioden (7 Stück) als Timestamp im PHP Script (Anfang und Ende Datum). Je nach Periode soll später dann ein bestimmtes Preisfeld aus der Datenbank für die Berechnung des Gesamtpreises herangezogen werden.
          Eigentlich wollte ich dies in der Anwendung lösen.
          Der Jahreswechsel macht mir eigentlich weniger Sorgen, da die erste Periode am 1.1. beginnt, und die letzte am 31.12. endet. Die Preise sind dabei auch von Jahr zu Jahr konstant, ändern sich also nur innerhalb des Jahres von Periode zu Periode. Für jede Periode gibt es ein Feld in der Tabelle. Somit kann einfach die Anzahl der Tage mit dem jeweiligen Preis multipliziert werden.
          Ich stehe nur mit der Prüfung, wieviele Tage in welcher Periode liegen, etwas auf dem Schlauch.

          Tobias

          Kommentar


          • #6
            nimm DATETIME als Spaltenformat.

            und dann eben TO_DAYS(from) - TO_DAYS(to) AS diff

            MySQL :: MySQL 5.1 Reference Manual :: 11.6 Date and Time Functions


            Für jede Periode gibt es ein Feld in der Tabelle.
            Falsches DB-Design.

            Die Perioden kommen in eine extra-Tabelle.

            SELECT a.from, a.to, b.period_from, b.period_to, b.price, TO_DAYS(a.from) - TO_DAYS(b.period_from) AS diff, TO_DAYS(b.period_to) - TO_DAYS(b.to) AS diff1, TO_DAYS(b.period_to) - TO_DAYS(b.period_from) AS diff2 FROM table AS a, period AS b WHERE a.from > b.period_from AND a.to < b.period_to

            Dann erhälst als Ergebnis ein oder mehrere Perioden.
            PHP-Code:
            $price '';

            while(
            $row mysql_fetch_assoc($res)){

                if(
            $row['diff'] > 0$price $price + ($row['diff'] * $row['price']);

                 if(
            $row['diff1'] > 0$price $price + (($row['diff2'] - $row['diff1']) * $row['price']);

            ungetestet.

            edit:
            stimmt noch nicht ganz - da müssen noch Prüfungen rein, wie Chris bereits geschrieben hat.
            Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

            Kommentar

            Lädt...
            X