Ankündigung

Einklappen
Keine Ankündigung bisher.

Arbeitszeit berechnen

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

  • Arbeitszeit berechnen

    Hallo zusammen,
    ich möchte meine Arbeitszeit vom Start bis Schluss berechnen lassen.
    Also wenn die Arbeitszeit 13:45 Uhr ist und der Schluss um 20:15 Uhr wäre (ohne Pause)
    Sollte als Ergebniss 6:30 rauskommen, also 6,5.
    Aber wie berechne ich das im PHP?

    Ich habe schon den Start und das Ende Subtrahiert.
    Habe aber keinen richtigen Ergebniss bekommen.

    Momentan Sieht der Code so aus

    PHP-Code:
                public function insert_wasserle()
                    {
                        
    $date date_create($this->input->post('add_wasserle_datum'));
                        
    $arbeitsstart date_create($this->input->post('add_wasserle_beginn'));
                        
    $arbeitsende  date_create($this->input->post('add_wasserle_ende'));
                        
    $minuten 60 date_format($arbeitsstart,"i") + date_format($arbeitsende,"i");
                        
    $stunde date_format($arbeitsende,"H") - date_format($arbeitsstart,"H");
                        
    $minute $stunde 60 $minuten;
                        
    $time $minute 60;
                        if(
    $this->input->post('add_wasserle_wo') == "1")//Lauterbach
                            
    {
                        
    // $this->db->where('datum', date_format($date,"Y.m.d"));
                        // $result = $this->db->get('wasserle');
                        // if($result->num_rows() < 1)
                            // {
                                
    $data = array(    'wochentag' => $this->input->post('add_wasserle_wochentag'),
                                                
    'datum' => date_format($date,"Y.m.d"),
                                                
    'wo' => $this->input->post('add_wasserle_wo'),
                                                
    'beginn' => $this->input->post('add_wasserle_beginn'),
                                                
    'ende' => $this->input->post('add_wasserle_ende'),
                                                
    // 'test' => $this->input->post('add_wasserle_ende'),
                                                // 'test' => 60 - date_format($arbeitsstart,"i") + date_format($arbeitsende,"i"),
                                                
    'test' => $time,
                                                );
                                return 
    $this->db->insert('wasserle'$data);
                            
    // }
                            
    }
                        
    // if($this->input->post('add_wasserle_wo') == "2")//Urlaub
                            // {
                                // $data = array(    'tb_event_katogorie' => 5,
                                                // 'tb_event_name' => $this->input->post('add_edition_name'),
                                                // 'tb_event_datum' => $add_datum,
                                                // );
                                // $this->db->insert('db_event', $data);
                            // }
                        // if($this->input->post('add_wasserle_wo') == "3")//Krank
                            // {
                                // $data = array(    'tb_event_katogorie' => 5,
                                                // 'tb_event_name' => $this->input->post('add_edition_name'),
                                                // 'tb_event_datum' => $add_datum,
                                                // );
                                // $this->db->insert('db_event', $data);
                            // }
                    

    Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
    Aber ich nutze diese Version nur auf meinem Rechner.


  • #3
    Aber wie berechne ich das im PHP?
    http://php.net/manual/de/datetime.diff.php & http://php.net/manual/de/dateinterval.format.php

    Kommentar


    • #4
      Da datetime::format nur volle Stunden ausgibt und die Minuten somit umgerechnet werden müssen, kann man sich mit einer Funktion behelfen.
      PHP-Code:
      function decimalHours($hours)
      {
          
      $parts explode(','$hours);
          
      $n $parts[0] + round($parts[1] / 602);
          return 
      str_replace(".",",",$n);
      }

      $dt1 = new DateTime('2017-12-05 13:45');
      $dt2 = new DateTime('2017-12-05 20:15');

      $dtInterval $dt1->diff($dt2);

      echo 
      decimalHours($dtInterval->format('%r%h,%i')) . ' Stunden'

      Kommentar


      • #5
        "Lange" keinen Einzeiler mehr gebracht

        PHP-Code:
        echo dt::create('2017-12-05 13:45')->diffTotal('2017-12-05 20:15','hours').' Stunden'
        dt s. Signatur github
        jspit.de github

        Kommentar


        • #6
          Zitat von protestix Beitrag anzeigen
          Da datetime::format nur volle Stunden ausgibt und die Minuten somit umgerechnet werden müssen, kann man sich mit einer Funktion behelfen.
          PHP-Code:
          function decimalHours($hours)
          {
          $parts explode(','$hours);
          $n $parts[0] + round($parts[1] / 602);
          return 
          str_replace(".",",",$n);
          }

          $dt1 = new DateTime('2017-12-05 13:45');
          $dt2 = new DateTime('2017-12-05 20:15');

          $dtInterval $dt1->diff($dt2);

          echo 
          decimalHours($dtInterval->format('%r%h,%i')) . ' Stunden'
          Genau das meinte ich.
          Danke
          Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
          Aber ich nutze diese Version nur auf meinem Rechner.

          Kommentar


          • #7
            Kommt auch drauf an wie man es möchte.
            PHP-Code:
            $dt1 = new DateTime('2017-12-05 13:45');
            $dt2 = new DateTime('2017-12-05 20:15');

            $dtInterval $dt1->diff($dt2);

            echo (
            $dtInterval->format('%r%h:%i')) . ' Stunden';
            // 6:30 Stunden 
            PHP.de Wissenssammlung | Debugging: Finde DEINE Fehler selbst! | mysql_* ist veraltet! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__ | Kein Support per PN

            Kommentar


            • #8
              Beide Lösungen #4 wie auch #7 sind schon sehr speziell. So muss die Zeitdifferenz unter 24 Stunden liegen und wenn die Zeiten mit Sekunden erfasst werden gibt es auch ein Problem.
              Wie dem auch sei, Germanikus hat wohl genau so etwas gesucht.
              jspit.de github

              Kommentar


              • #9
                Dann halt hier noch eine Alternative, die auch über mehrere Tage hinweg funktioniert

                PHP-Code:
                date_default_timezone_set('Europe/Berlin');
                $dt1 "2017-10-28 21:45";
                $dt2 "2017-10-29 06:15";

                $diff strtotime($dt2) - strtotime($dt1);  
                echo (
                $diff/60/60) . ' Stunden';     // 9.5 Stunden 

                Kommentar


                • #10
                  Aber du wirst in keiner Zeiterfassung finden das du "9,5" Stunden gearbeitet hast..

                  PHP-Code:
                  date_default_timezone_set('Europe/Berlin');

                  $dt1 = new DateTime('2017-10-28 21:45');
                  $dt2 = new DateTime('2017-10-29 06:15');
                  $dtInterval $dt1->diff($dt2);

                  echo (
                  $dtInterval->format('%r%h:%i')) . ' Stunden';
                  // 9:30 Stunden 
                  PHP.de Wissenssammlung | Debugging: Finde DEINE Fehler selbst! | mysql_* ist veraltet! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__ | Kein Support per PN

                  Kommentar


                  • #11
                    Das ist wohl richtig, aber er wollte das wohl so, wenn ich ihn richtig verstanden habe.
                    Gib mal bei dir bis 2017-10-30 ein dann kommt immer noch 9:30 raus, was ja wohl nicht gewollt sein kann. Darauf wies ja jspit schon hin.

                    Kommt halt immer darauf an, wie man es braucht und ob es ausreicht sich nur auf unter 24 Stunden zu beschränken.
                    Bei der DateTime Variante muss man zerlegen und umrechnen und bei strtotime auch, wenn es mit Minuten im Nachkommabereich sein soll.

                    Kommentar


                    • #12
                      Zitat von protestix Beitrag anzeigen
                      Gib mal bei dir bis 2017-10-30 ein dann kommt immer noch 9:30 raus, was ja wohl nicht gewollt sein kann. Darauf wies ja jspit schon hin.
                      Das ist aber ein reines Ausgabeproblem, das muss man halt berücksichtigen und d x 24 rechnen und dazu addieren, wenn man es denn so im Ergebnis als reine Stundenzahl haben will.

                      Die Info ist jedenfalls - im IntervalObject - vorhanden:
                      PHP-Code:
                      date_default_timezone_set('Europe/Berlin');

                      $dt1 = new DateTime('2017-10-28 21:45');
                      $dt2 = new DateTime('2017-10-30 06:15');
                      $dtInterval $dt1->diff($dt2);

                      print_r($dtInterval);
                      /*
                      DateInterval Object
                      (
                          [y] => 0
                          [m] => 0
                          [d] => 1     <---
                          [h] => 8
                          [i] => 30
                          [s] => 0
                          ...
                      */ 
                      PHP.de Wissenssammlung | Debugging: Finde DEINE Fehler selbst! | mysql_* ist veraltet! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__ | Kein Support per PN

                      Kommentar


                      • #13
                        Eine frage hätte ich noch zum Code von @protestix.
                        Wie kann ich den "," in einen Punkt umwandeln?
                        Habe es schon mit "str_replace" versucht, aber das funktioniert nicht.

                        Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
                        Aber ich nutze diese Version nur auf meinem Rechner.

                        Kommentar


                        • #14
                          number_format() ?!
                          PHP.de Wissenssammlung | Debugging: Finde DEINE Fehler selbst! | mysql_* ist veraltet! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__ | Kein Support per PN

                          Kommentar


                          • #15
                            Hab mir gerade die frage gerade selber beantwortet.
                            Einfach ingnorieren oder löschen^^
                            Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
                            Aber ich nutze diese Version nur auf meinem Rechner.

                            Kommentar

                            Lädt...
                            X