Ankündigung

Einklappen
Keine Ankündigung bisher.

Arbeitszeit berechnen

Einklappen

Neue Werbung 2019

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.

  • #2
    zB: https://php-de.github.io/jumpto/datetime/#differenzen
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #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

          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 
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | 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.

                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 
                    The string "()()" is not palindrom but the String "())(" is.

                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | 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
                            ...
                        */ 
                        The string "()()" is not palindrom but the String "())(" is.

                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | 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() ?!
                            The string "()()" is not palindrom but the String "())(" is.

                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | 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