Ankündigung

Einklappen
Keine Ankündigung bisher.

Differenz zwischen zwei Datumsangaben errechnen

Einklappen

Neue Werbung 2019

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

  • Differenz zwischen zwei Datumsangaben errechnen

    Hi,

    ich suche einen Möglichkeit, ziemlich genau die Zeitspanne zwischen zwei Datumsangaben zu berechnen und zwar in Tagen, Wochen und Monaten. Ein Ansatz könnte der Befehl mktime sein, der auch Schaltjahre etc. berechnen soll:

    PHP-Code:
    $a mktime(0,0,0,10,10,2011);
    $b mktime(0,0,0,09,02,2013);
    echo 
    $b-$a// zeigt die Differenz in Sekunden 
    Könnt Ihr mir helfen?

    Danke im voraus )

  • #2
    Na wie wärs wenn du die Timestamps subtrahierst? Ein Tag hat immer 24h (=24x3600s), eine Woche immer 7 Tage und ein Jahr ziemlich oft 365 Tage. Oder was ist dein Ansatz?

    P.s.: Du hast die Zeitumstellung vergessen

    Kommentar


    • #3
      Hat doch PHP schon alles dabei:
      http://www.php.net/manual/de/datetime.diff.php

      Kommentar


      • #4
        Zitat von ChristianK Beitrag anzeigen
        Na wie wärs wenn du die Timestamps subtrahierst? Ein Tag hat immer 24h (=24x3600s)
        P.s.: Du hast die Zeitumstellung vergessen
        Dein Ansatz hat auch die Zeitumstellung vergessen. Da hat der Tag eben nicht 24h. trollface hat den Weg gezeigt : datetime.diff.

        Kommentar


        • #5
          Jau, der Ansatz ist richtig, wenn man nur die Tage erfahren möchte.

          PHP-Code:
          $datetime1 date_create('2013-02-01');
          $datetime2 date_create('2013-03-02');
          $interval date_diff($datetime1$datetime2);
          echo 
          $interval->format('%R%a days'); 

          Wie aber sieht es mit Monaten und Jahren aus. Wenn ich allein die Zeitspanne vom 01.02.2012 bis zum 02.03.2013 erfahren möchte, würde mir die Routine 29 Tage anzeigen, was ja auch stimmt. Bei einem konstanten Teiler von 30 (Tagen) würden jedoch genau 29 Tage rauskommen und nicht 1 Monat und 1 Tag.

          Kommentar


          • #6
            Kleiner Nachtrag!

            auch wenn ich die entsprechende Zeile wie folgt ändere, rechnet die Routine mit 30 Tagen und berücksichtigt nicht die Besonderheiten der Monate

            PHP-Code:
            echo $interval->format('%y-%m-%d'); 

            Kommentar


            • #7
              Der Monat ist als Einheit für eine Zeitspanne höchst ungeeignet. Was ist ein Monat bei einer Zeitspanne? Das sieht wohl jeder anders. Kleines, nicht ganz so erst zu nehmendes Beispiel:
              Ein Kind wurde am 30.Januar 2013 geboren. Wann wird das Kind einen Monat alt? Am 28.Februar, am 1.März? Oder ist es am 1.März schon 1 Monat (den Februar) und 2 Tage alt...

              Kommentar


              • #8
                Grundsätzlich kann man davon ausgehen, dass ein Monat 30 Tage lang ist.
                In deinem Beispiel hieße das 1. März, in einem Schaltjahr aber 29. Februar.
                Daraus folgt eigentlich auch nur das, was du anfangs in deinem Kommentar geschrieben hast:
                Der Monat ist als Einheit für eine Zeitspanne höchst ungeeignet.

                Kommentar


                • #9
                  Kurze Frage,

                  kann ich dem folgenden PHP-Script auch für "$datetime2" automatisch das heutige Datum einfügen lassen und dann die differentz in Tage ausgeben lassen???

                  PHP-Code:
                  $datetime1 date_create('2013-02-01');
                  $datetime2 date_create('2013-03-02');
                  $interval date_diff($datetime1$datetime2);
                  echo 
                  $interval->format('%R%a days'); 
                  Wenn ja wie???

                  danke für eure Hilfe.

                  Kommentar


                  • #10
                    Wenn ja wie???
                    zB in die Doku schauen, erster Parameter time und die Beschreibung dazu:

                    Enter NULL here to obtain the current time when using the $timezone parameter.
                    http://php.net/manual/de/datetime.construct.php

                    Somit, zB:

                    PHP-Code:
                    date_default_timezone_set('Europe/Berlin'); 
                    $datetime1 date_create('2015-01-01');  
                    $datetime2 date_create(null);  
                    $interval date_diff($datetime1$datetime2);  
                    echo 
                    $interval->format('%R%a days');  
                    // +6 days 

                    Kommentar


                    • #11
                      date_create(null) entspricht date_create('Now') und enthält das aktuelle Datum und die aktuelle Zeit. Stört hier nicht, da nur die Tage interessieren. Für den allgemeinen Fall ist
                      PHP-Code:
                      $datetime2 date_create('Today'); 
                      besser, liefert das aktuelle Datum mit der Zeit 00:00:00.

                      Kommentar


                      • #12
                        Danke für die schnelle Antwort werde ich gleich mal ausprobieren.

                        Kommentar


                        • #13
                          Wobei das einfacher (und deutlicher geht):

                          PHP-Code:
                          date_create() 

                          Kommentar


                          • #14
                            Ich weiß jetzt nicht, auf welchen Beitrag deine Bemerkung zielt.

                            PHP-Code:
                            var_dump(date_create() == date_create(null));  //true

                            var_dump(date_create() == date_create('Today'));  //false 

                            Kommentar


                            • #15
                              Das hat wunderbar geklappt.

                              Nur jetzt habe ich das nächste Problem, das erste Datum ($datetime1 = date_create('2015-01-01')) soll aus der Datenbank ausgelesen werden, dort bekomme ich dann folgende Datum Format: dd.mm.jj.

                              wie bekomme ich dieses oben genannte Datum in das jjjj-mm-dd Format umgewandelt???

                              von der Uni haben wir leider eine Oracle Datenbank zur Verfügung gestellt bekommen.

                              danke für die Hilfe.

                              Kommentar

                              Lädt...
                              X