Ankündigung

Einklappen
Keine Ankündigung bisher.

Mit date() Differenz aus 2 Uhrzeiten errechnen

Einklappen

Neue Werbung 2019

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

  • Mit date() Differenz aus 2 Uhrzeiten errechnen

    Ich brauche mal eure Hilfe. Ich versuche mit 2 Uhrzeiten zu rechnen. Nur leider funktioniert das nicht so, wie ich das möchte =(

    Es wird also eine Anfangs Uhrzeit in ein formular eingegeben und eine End Zeit. Jetzt soll er die Differenz zwischen den 2 Uhrzeiten errechnen. z.B. Anfangs Zeit ist 16:00 Uhr und End Zeit ist 17:00 Uhr. Und er soll dann das ausgeben 1:00. Oder z.B. Wenn ich als Start zeit 17:00 eingeben und End Zeit 18:23 eingebe, dass dann das rauskommt: 1:23

    Leider klappt das mit meinem versuch gar nicht. Beim ersten Echo kommt das raus: 35:0 und beim nächsten halt: 2560316450 und beim letzten: 00:32

    Und das stimmt definintiv nicht. Da müsste das rauskommen 1:00

    Kann mir jemand weiterhelfen? das ist der PHP Code im wesentlichen.

    PHP-Code:
        if ('POST' == $_SERVER['REQUEST_METHOD']) 
        {
            if (!isset(
    $_POST['name'], $_POST['beginn1'], $_POST['beginn2'], $_POST['ende1'], $_POST['ende2'], $_POST['firma'], $_POST['grund'], $_POST['formaction'])) 
            {
                die (
    'Benutzen sie nur Formulare von der Homepage.');
            }
            if ((
    '' == $name trim($_POST['name'])) or
                (
    '' == $beginn1 trim($_POST['beginn1'])) or
                (
    '' == $beginn2 trim($_POST['beginn2'])) or
                (
    '' == $ende1 trim($_POST['ende1'])) or
                (
    '' == $ende2 trim($_POST['ende2'])) or
                (
    '' == $grund trim($_POST['grund'])) or
                (
    '' == $firma trim($_POST['firma']))) 
            {
                die (
    'Bitte füllen sie das Formular vollständig aus.');
            }
            
    $beginn3=mktime($beginn1,$beginn2);
            
    $ende3=mktime($ende1,$ende2);
            
    $neu=$beginn3+$ende3;
            
    $stunde=date("H",$beginn3)+date("H",$ende3);
            
    $minute=date("i",$beginn3)+date("i",$ende3);
            echo 
    $stunde;
            echo 
    ":";
            echo 
    $minute;
            echo 
    "---";
            echo 
    $neu;
            
    $neu2=date("H:i",$neu);
            echo 
    "---";
            echo 
    $neu2


  • #2
    Eine verständliche Variante wäre:
    Code:
    <?
    $start_time = explode(":", $beginn1);
    $end_time = explode(":", $beginn2);
    
    $start_time_mins = $start_time[1] + ( $start_time[0] * 60 );
    $end_time_mins = $start_time[1] + ( $start_time[0] * 60 );
    
    $diff_time = $end_time_mins - $start_time_mins;
    $diff_time_string = (floor( $diff_time / 60)).":".($diff_time % 60);
    
    ?>
    Im ersten Schritt zerlegst du den String den du bekommst in ein Array ( Index 0 enthält die Stunden, Index 1 die Minuten ).
    Im zweiten Schritt stellst du fest wieviel der abstand in minuten zwischen beiden werten ist.
    Im dritten Schritt baust du das Zeitformat wieder zusammen ( hh:mm ).

    Die Sache hat allerdings ein Problem, die Zeiten müssen innerhalb eines Tages liegen. ich würde dir dazu raten das das Formular einen Zeitstempel übergibt, du also genau weißt welcher tag, welcher monat, welches jahr, welche stunde, welche minute und welche sekunde gemeint ist. Daraus generierst du dann einen unix-zeitstempel, und stellst dort den abstand zwischen beiden fest. Die Zahl die bekommst sind Sekunden und können auf ein gewünschtes Format zurückgerechnet werden.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Ja ich kann kein Timestamp benutzen, weil ja eingetragen wird, wann man angefangen hat Überstunden zu machen und wann man dann fertig war. Und das wird meist nicht sofort sondern erst später oder gar am nächsten Tag eingetragen.

      Und es sollte auch möglich sein, da minus zu rechnen also z.B. eigentliche Arbeitszeit bis: 17:00 Uhr und feierabend gemacht um 16:00 Uhr. Dass der errechente, dass das dann -1:00 ist.

      Kommentar


      • #4
        Zitat von TrueEdge Beitrag anzeigen
        Ja ich kann kein Timestamp benutzen, weil ja eingetragen wird, wann man angefangen hat Überstunden zu machen und wann man dann fertig war. Und das wird meist nicht sofort sondern erst später oder gar am nächsten Tag eingetragen.
        Ja und? Auch Morgen kann man noch Eingaben für Gestern machen - wenn dein Formular zur Datenerhebung diese halbwegs vernünftig umsetzt.

        Zumal Daten wie Überstunden etc. eigentlich eh eher wertlos sind, wenn kein Datum dazugehört - da kann ich ja eintragen, was ich will, und kontrollieren lässt es sich kaum.

        Kommentar


        • #5
          @ChrisB: Der Threadersteller bat um einen vernünftigen Code bzw. um die Verbesserung sowie erklärung der Fehler in seinem Code und nicht ob es sinnvoll oder sinnlos ist diesen Code zu machen!

          @TrueEdge
          Wenn du wirklich nur die Differenz zwischen den beiden Zeitpunkten brauchst, dann ist dein Code aber i-wie viel zu lang ?

          Kommentar


          • #6
            Und es sollte auch möglich sein, da minus zu rechnen also z.B. eigentliche Arbeitszeit bis: 17:00 Uhr und feierabend gemacht um 16:00 Uhr. Dass der errechente, dass das dann -1:00 ist.
            Bereits hier wird die Anforderung schwammig. Denn das System kann nicht mehr erkennen, ob „früher Feierabend“ oder „Überstunden bis 16 des Folgetages“ gemeint ist.
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Zitat von md5() Beitrag anzeigen
              @ChrisB: Der Threadersteller bat um einen vernünftigen Code bzw. um die Verbesserung sowie erklärung der Fehler in seinem Code und nicht ob es sinnvoll oder sinnlos ist diesen Code zu machen!
              Wenn der Fehler schon im Konzept liegt, dann kann er doch froh sein, darauf hingewiesen zu werden.

              Ob er solche Ratschläge annehmen will oder nicht, ist ja immer noch sein Ding.

              Und wie man ohne Verwendung von Timestamps mit Zeiten rechnen kann, und welche Problemfälle sich dabei ggf. ergeben können, darauf hat tr0y ja vorher schon hingewiesen.

              Kommentar


              • #8
                Also sollte ich dann am besten noch Eingabe Felder für das Datum machen? Dass man damit dann richtig rechnen kann?

                Kommentar


                • #9
                  Zitat von TrueEdge Beitrag anzeigen
                  Also sollte ich dann am besten noch Eingabe Felder für das Datum machen? Dass man damit dann richtig rechnen kann?
                  Wenn du mit Timestamps arbeiten willst - und das tust du in deinem gezeigten Code ja, schließlich verwendest du dort mktime, obwohl du sagst, du könntest keine Timestamps verwenden - dann ja.

                  Und wie tr0y schon anmerkte, wenn irgendwann mal der Fall auftaucht, dass solch ein Zeitraum über Mitternacht hinaus geht, dann hast du mit reinen Zeitangaben ohne Datum sowieso ein Problem.

                  Kommentar


                  • #10
                    Zitat von ChrisB Beitrag anzeigen
                    obwohl du sagst, du könntest keine Timestamps verwende
                    Ja sry, ich habe noch nie so wirklich mit timestamps und date, usw... gearbeitet.

                    Wie müsste ich denn dann rechnen, wenn ich jetzt sage, dass das Datum mit angegeben wird? Ich muss ja dann noch Tage, Monat und Jahr dafür zum Formular hinzufügen. Wie muss ich dann die Funktion erstellen, dass er die Differenz errechnet? Sowohl zum Überstunden hinzufügen, als auch zum abbauen?

                    Kommentar


                    • #11
                      @TrueEdge...
                      ich habe mir ein bischen Zeit gelassen und diesen Code fuer dich geschrieben.
                      Hoffentlich ist es so wie du es willst

                      PHP-Code:
                      <form action="differenz.php" method="POST">
                      <table width=400>
                          <tr>
                              <td></td>
                              <td><center>Anfang</center></td>
                              <td><center>Ende</center></td>
                          </tr><tr>
                              <td>Zeit:</td>
                              <td>
                                  <input type=text name="anfang_stunden" size=1>
                                  :
                                  <input type=text name="anfang_minuten" size=1>
                              </td>
                              <td>
                                  <input type=text name="ende_stunden" size=1>
                                  :
                                  <input type=text name="ende_minuten" size=1>
                              </td>
                          </tr><tr>
                              <td>Datum:</td>
                              <td>
                                  <input type=text name="anfang_datum" value="TT/MM/JJJJ">
                              </td>
                              <td>
                                  <input type=text name="ende_datum" value="TT/MM/JJJJ">
                              </td>
                          </table>
                          <input type=submit name=differenziere value="Differenz ausrechnen">
                      </form>
                      <?php
                      $anfang_stunden 
                      trim($_POST['anfang_stunden']);
                      $anfang_minuten trim($_POST['anfang_minuten']);
                      $anfang_datum trim($_POST['anfang_datum']);

                      $ende_stunden trim($_POST['ende_stunden']);
                      $ende_minuten trim($_POST['ende_minuten']);
                      $ende_datum trim($_POST['ende_datum']);

                      $differenz = array();

                      $differenz['stunden'] = 
                      $differenz['stunden'] = $ende_stunden-$anfang_stunden;
                      $differenz['minuten'] = $ende_minuten-$anfang_minuten;
                      echo 
                      "Differenz: <br>"
                          echo 
                      "Minuten:".$differenz['minuten']."<br>";
                          echo 
                      "Stunden:".$differenz['stunden']."<br>";

                      if(
                      $anfang_datum === $ende_datum)
                      {
                          
                      //gleicher Tag
                      }else{
                          
                      $datum_anfang explode("/",$anfang_datum);
                          
                      $datum_ende explode("/",$ende_datum);
                          
                          
                      $differenz['tage'] = $datum_ende[0]-$datum_anfang[0];
                          
                      $differenz['monate'] = $datum_ende[1]-$datum_anfang[1];
                          
                      $differenz['jahre'] = $datum_ende[2]-$datum_anfang[2];
                          
                              echo 
                      "Tage:".$differenz['tage']."<br>";
                          echo 
                      "Monate:".$differenz['monate']."<br>";
                          echo 
                      "Jahre:".$differenz['jahre']."<br>";
                          }

                      ?>

                      Kommentar


                      • #12
                        bennene die Datei mit diesem Code "differenz.php"

                        Kommentar


                        • #13
                          Zitat von md5() Beitrag anzeigen
                          @TrueEdge...
                          ich habe mir ein bischen Zeit gelassen und diesen Code fuer dich geschrieben.
                          Hoffentlich ist es so wie du es willst
                          Und wenn nicht, änderst du den Code doch bestimmt noch mal kostenlos, oder?
                          http://hallophp.de

                          Kommentar


                          • #14
                            er soll den Code dann selber an sich anpassen.
                            Du willst doch etz kein Geld fuer sowas verlangen oder ?

                            Kommentar


                            • #15
                              Vielen Dank md5() Der Code funktioniert super =)

                              Und wie kann ich es machen, dass wenn bei Minuten jetzt 0 da steht oder 7 oder unter 10 dass er automatisch eine 0 vorne dran setzt?

                              Kommentar

                              Lädt...
                              X