datum==> übernachtungsberechnung? - wichtig!

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

  • datum==> übernachtungsberechnung? - wichtig!

    Hi Leute!
    Ich habe eine Abfrage geschrieben! In der man einen Anreisetag und einen Abreisetag eingibt! Nun möchte ich berechnen lassen wieviele Übernachtungen dazwischenliegen und das in die Tabelle schreiben lassen!


    also so wird das datum bisher in die tabelle eingefügt!

    '$antage.$anmonate.$anjahre','$abtage.$abmonate.$abjahre'

    dann steht also nachher in der tabelle 21.02.2001 und 22.02.2002! Jetzt möchte ich aber das er hieraus die Differenz berechnet! und vorallem wie mache ich das damit er jahreswechsel und monatswechsel berücksichtigt!

    ist sehr wichtig für mich vielen dank für eure hilfe!

  • #2
    Nur ein kleiner Tipp, aber versuche es mal über die Datumsfunktionen.

    echo date ("z", mktime(0,0,0,2,26,2002));
    Tag seit dem Jahresbeginn

    echo date ("L", mktime(0,0,0,2,16,2002));
    Schaltjahr Ausgabe 0 oder 1

    Schau mal ob du damit was anfangen kannst.


    Tock (,tock,tock)

    Kommentar


    • #3
      ne leider knann ich damit nix anfangen (mit der datumsfunktion ansich schon) aber nicht wie ich das hier benutzen könnte und dann die berechnung angestellt werden könnte!

      ???????hilfe?????

      Kommentar


      • #4
        Nun, das mit dem Zeitstemplel ist schon ganz richtig so.
        Lass Dir anhand der Eingabe TT.MM.JJJJ einen Zeitstempel ausgeben.
        mktime()
        Wenn Du nun den ZS der Anreise dem von der Abreise abziehst, erhälst Du den Gesammtaufenthalt. Das ganze minus 1 und Du hast die Übernachtungen!

        Kommentar


        • #5
          1. mktime zählt keine Tage sondern Sekunden.
          2. Wieso minus 1?`Zwischen dem 1. und 2. Mai liegt eine Nacht. Wenn ich 2 von 1 abziehe, erhalte ich auch 1, da braucht nix mehr abgezogen zu werden.
          3. Wenn schon Daten in der Datenbank speichern, warum dann nicht in einem Format, mit der das DBMS was anfangen kann.
          Speichere die Daten im Format YYYY-MM-DD, dafür gibt es einen Datentype DATE in jeder SQL-DB.
          und mit to_days(DATUMABREISE)-to_days(DATUMANKUNFT) bekommst du dann die Anzahl der Übernachtungen. (siehe http://www.mysql.com/doc/D/a/Date_an...functions.html)
          mein Sport: mein Frühstück: meine Arbeit:

          Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

          Kommentar


          • #6
            ich hab das mal probiert und so gelöst es funktioniert ;-))


            <?php
            $ab = '20.2.2002';
            $an = '29.2.2002';


            $dab = sscanf($ab, '%d.%d.%d');
            $dan = sscanf($an, '%d.%d.%d');

            $abzahl = date("z", mktime(0,0,0,$dab[1],$dab[0],$dab[2]));
            $anzahl = date("z", mktime(0,0,0,$dan[1],$dan[0],$dan[2]));

            $widergabe = $anzahl - $abzahl ;

            echo "$widergabe";
            ?>

            aber Titus hat widermal die komfortablere lösung ...

            nur in punkt 1 muss ich dir das erste mahl widersprechen Titus
            mktime(stunde, minute, sekunde, monat, tag, jahr, sz)
            sz ist optional. Wird er auf 1 gesetzt befindet sich das datum in der sommerzeit. 0 ist auserhald der sommerzeit. standart ist -1 (unbekannt).

            gruss blume

            [Editiert von blume am 26-02-2002 um 21:00]
            für wallpaper: blumenbeet.com

            Kommentar


            • #7
              hab das mal so probiert: wobei an... immer die anreise betrifft!

              aber ich bekomm immer den fehler
              unexpected error in date() also in den zeilen
              $abzahl
              $anzahl

              --------------------

              $ab = '$antage.$anmonate.$anjahre';
              $an = '$abtage.$abmonate.$abjahre';


              $dab = sscanf($ab, '%d.%d.%d');
              $dan = sscanf($an, '%d.%d.%d');

              $abzahl = date("z", mktime(0,0,0,$dab[1],$dab[0],$dab[2]));
              $anzahl = date("z", mktime(0,0,0,$dan[1],$dan[0],$dan[2]));

              $widergabe = $anzahl - $abzahl ;

              echo "$widergabe";
              -------------

              kannst mir weiterhelfen?

              Kommentar


              • #8
                kann ich schohn aber ich würde wirklich mal die variante von Titus ausprobieren .... ist sicher einfacher...

                nun muss man nämlich das datum zuerst zusammensetzen und dann wider auseinandernehmen .....

                <?php
                $abtage = "22";
                $abmonate = "2";
                $abjahre = "2002";

                $antage = "28";
                $anmonate = "2";
                $anjahre = "2002";


                $abfahrt = "$abtage.$abmonate.$abjahre";
                $anfahrt = "$antage.$anmonate.$anjahre";


                $dab = sscanf($abfahrt, '%d.%d.%d');
                $dan = sscanf($anfahrt, '%d.%d.%d');

                $abzahl = date("z", mktime(0,0,0,$dab[1],$dab[0],$dab[2]));
                $anzahl = date("z", mktime(0,0,0,$dan[1],$dan[0],$dan[2]));

                $widergabe = $anzahl - $abzahl;

                echo "$widergabe Uebernachtungen";
                ?>

                das heisst konkret du darfst das :
                $anfahrt = "$antage.$anmonate.$anjahre"; nicht in hochkommas packen ' sondern musst es in anführungszeichen " schreiben ;-))

                [Editiert von blume am 26-02-2002 um 21:51]
                für wallpaper: blumenbeet.com

                Kommentar


                • #9
                  danke

                  klasse! owbwohl ich das schon zerpflückt hatte geht es so:

                  $qabtage = "$antage";
                  $qabmonate = "$anmonate";
                  $qabjahre = "$anjahre";

                  $qantage = "$abtage";
                  $qanmonate = "$abmonate";
                  $qanjahre = "$abjahre";


                  $abfahrt = "$qabtage.$qabmonate.$qabjahre";
                  $anfahrt = "$qantage.$qanmonate.$qanjahre";


                  $dab = sscanf($abfahrt, '%d.%d.%d');
                  $dan = sscanf($anfahrt, '%d.%d.%d');

                  $abzahl = date("z", mktime(0,0,0,$dab[1],$dab[0],$dab[2]));
                  $anzahl = date("z", mktime(0,0,0,$dan[1],$dan[0],$dan[2]));

                  $widergabe = $anzahl - $abzahl;

                  echo "$widergabe Uebernachtungen";


                  frage noch wird hierbei schaltjahr und 30 tage bzw 31 tage berücksichtigt?

                  Kommentar


                  • #10
                    jahresgrenze?

                    gibt doch noch ein prob!
                    und zwar berechnet er nicht über die jahresgrenze!

                    also wenn ich eine buchung vom 31.12.2002 auf den 2.01.2003 habe!

                    weiß jemand rat?

                    Kommentar


                    • #11
                      benutze
                      floor(mktime(...)/86400) // der Tag hat 86400 Sekunden
                      statt
                      date('z', mktime(...))
                      mein Sport: mein Frühstück: meine Arbeit:

                      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                      Kommentar


                      • #12
                        danke

                        danke titus das hilft mir schon super!

                        jetzt habe ich hier noch ein letztes prob!

                        und zwar kann ich negatuivbuchungen durchführen nur das darf nicht sein!

                        also ich darf vom 31.1.2002 auf den 30.1.2002 keine buchungen durchführen können!

                        was mach ich da am besten!

                        gruß

                        Kommentar

                        Lädt...
                        X