Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeit Auf/-Abrunden

Einklappen

Neue Werbung 2019

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

  • Zeit Auf/-Abrunden

    Hallo liebe Gemeinde,

    ich habe da ein Problem, was ich mit der Suche bei Google nicht wirklich lösen kann.

    Kurz erklärt:

    Haben wir 13:02 Uhr soll aufgerundet werden auf 13:15 Uhr.

    Anders herum genau so:

    Also 13:35 Uhr auf 13:30 Uhr.

    Habe mir zwei Scripte gebaut, aber beide ergeben anstatt 13:00 Uhr 13:60 Uhr

    Script 1:

    PHP-Code:
    $Stunden date(H,time()); 
            
    $Minuten date(i,time()); 

            
    $Aufgerundet = ($Minuten/15)*15

            
    $MeineAusgabe $Stunden.':'.$Aufgerundet

            return 
    $MeineAusgabe
    Script 2:

    PHP-Code:
    $minuten date('i'time()); 

        return 
    ceil($minuten/60*4)/4*60
    hat jemand ein Denkanstoß für mich???

  • #2
    Haben wir 13:02 Uhr soll aufgerundet werden auf 13:15 Uhr.

    Anders herum genau so:

    Also 13:35 Uhr auf 13:30 Uhr.
    Was ist die genaue Regel? Warum wird bei 13:35 nicht auch aufgerundet auf 13:45?

    Ab wann rundest du auf und ab wann ab?
    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
      PHP-Code:
      $interval 15 60// 15 minutes
      $timestamp round(time() / $interval) * $interval;

      echo 
      date('h:i'$timestamp); 
      Da ich von deinem Text nicht auf die Rundungslogik schließen kann, hab ich hier einfach round() verwendet. Diese musst du dann noch durch die gewünschte Logik ersetzen.

      Kommentar


      • #4
        Hallo,

        Die Logik ist folgende:

        Es ist ein Check In / Out System.

        Wer um 13:02 Uhr eincheckt, ist 2 Minuten zuspät und daher wird aufgerundet.

        Wer um 19:55 Uhr auscheckt, ist 5 Minuten zu früh. Daher abrunden auf 19:45 Uhr.

        Sorry, hätte ich erklären sollen

        Kommentar


        • #5
          Zitat von MischelB Beitrag anzeigen
          Die Logik ist folgende:

          Es ist ein Check In / Out System.

          Wer um 13:02 Uhr eincheckt, ist 2 Minuten zuspät und daher wird aufgerundet.

          Wer um 19:55 Uhr auscheckt, ist 5 Minuten zu früh. Daher abrunden auf 19:45 Uhr.
          Dann musst du nur round() durch ceil() oder floor() ersetzen.

          Kommentar


          • #6
            Zitat von MischelB Beitrag anzeigen
            Wer um 13:02 Uhr eincheckt, ist 2 Minuten zuspät und daher wird aufgerundet.
            mit ceil() wird aufgerundet
            Zitat von MischelB Beitrag anzeigen
            Wer um 19:55 Uhr auscheckt, ist 5 Minuten zu früh. Daher abrunden auf 19:45 Uhr.
            mit floor() wird abgerundet



            Kommentar


            • #7
              Zitat von protestix Beitrag anzeigen
              mit ceil() wird aufgerundet

              mit floor() wird abgerundet


              Habe das mit floor() und ceil() probiert. aber dann wird z.B: anstatt 13:00 wird es dann 12:60

              Kommentar


              • #8
                Zitat von MischelB Beitrag anzeigen
                Habe das mit floor() und ceil() probiert. aber dann wird z.B: anstatt 13:00 wird es dann 12:60
                Nein. Zumindest nicht bei meinem geposteten Code.

                Kommentar


                • #9
                  Unter meiner Signatur findest du auf GitHub die DateTime-Erweiterung dt, mit der du Schneiden (Cut) und Runden(Round) kannst.

                  Kommentar


                  • #10
                    Zitat von MischelB Beitrag anzeigen

                    Habe das mit floor() und ceil() probiert. aber dann wird z.B: anstatt 13:00 wird es dann 12:60
                    Den Code müssen wir wohl erahnen, da du den ja nicht zeigst.

                    Schau mal hier,
                    PHP-Code:
                    function checkInTime($time){
                        
                    $dt date_create($time);     
                        
                    $quarters = (int)( ( $dt->format('i') + 15 ) / 15 ) * 15;
                        
                    $dt->setTime$dt->format('H'), $quarters );
                        return 
                    $dt->format('H:i');
                    }
                    function 
                    checkOutTime($time){
                        
                    $dt date_create($time);     
                        
                    $quarters = (int)( $dt->format('i') / 15 ) * 15;
                        
                    $dt->setTime$dt->format('H'), $quarters );
                        return 
                    $dt->format('H:i');
                    }

                    echo 
                    checkInTime("13:02"); // 13:15
                    echo "<br>\n";
                    echo 
                    checkOutTime("19:55"); // 19:45 

                    Kommentar


                    • #11
                      Zitat von MischelB Beitrag anzeigen
                      ...
                      Wer um 19:55 Uhr auscheckt, ist 5 Minuten zu früh. Daher abrunden auf 19:45 Uhr.
                      ??? soll das heißen - der ist 5 Minuten zu früh und 10 Minuten zu spät??? Daher die Zeit zurück auf 19:45 ??? Derjeniger, der in 13:02 kam, war auch 2 Minuten zu spät... Bist Du ein Troll???
                      PHP-Code:
                      $viertel ceiltime( ) / 900 );
                      $zeitpunkt date'H:i'$viertel 900 ); 
                      Signaturrrrrrr

                      Kommentar


                      • #12
                        Zeiten auf den Beginn eines frei festlegbaren Zeitintervalls zu reduzieren ist eine Aufgabe die nicht so selten ist.

                        Hier wurden mehrere speziellen Lösungen für ein Intervall von 15 Minuten gezeigt. Diese lassen sich nicht ohne weiteres auf beliebige Zeitintervalle übertragen.

                        Steht eine Cut-Methode für beliebige Zeitintervalle zur Verfügung ergeben sich vielseitige Nutzungsmöglichkeiten.

                        Dazu einige Beispiele als Ergänzung zu #9 :
                        PHP-Code:
                        //Anfang Zeitintervall
                        $dt = new dt("2018-08-08 19:55:23");
                        echo 
                        $dt
                          
                        ->cut("15 Minutes")
                          ->
                        format("Y-m-d H:i:s");
                        //2018-08-08 19:45:00

                        //Anfang nächstes Zeitintervall
                        $dt = new dt("2018-08-08 19:55:23");
                        echo 
                        $dt
                          
                        ->modify("+15 Minutes")
                          ->
                        cut("15 Minutes")
                          ->
                        format("Y-m-d H:i:s");
                        //2018-08-08 20:00:00

                        $dt = new dt("2018-08-08 19:55:23");
                        echo 
                        $dt
                          
                        ->cut("20 Minutes")
                          ->
                        format("Y-m-d H:i:s");
                        //2018-08-08 19:40:00

                        $dt = new dt("2018-08-08 19:55:23");
                        echo 
                        $dt
                          
                        ->cut("1 Minutes")
                          ->
                        format("Y-m-d H:i:s");
                        //2018-08-08 19:55:00

                        $dt = new dt("2018-08-08 19:55:23");
                        echo 
                        $dt
                          
                        ->cut("2 Seconds")
                          ->
                        format("Y-m-d H:i:s");
                        //2018-08-08 19:55:22

                        $dt = new dt("2018-08-08 19:55:23");
                        echo 
                        $dt
                          
                        ->cut("4 Hours")
                          ->
                        format("Y-m-d H:i:s");
                        //2018-08-08 16:00:00 

                        //Wochenanfang
                        $dt = new dt("2018-08-08 19:55:23");
                        echo 
                        $dt
                          
                        ->cut("1 Week")
                          ->
                        format("Y-m-d H:i:s");
                        //2018-08-06 00:00:00 (Mo)

                        //Quartalsanfang
                        $dt = new dt("2018-08-08 19:55:23");
                        echo 
                        $dt
                          
                        ->cut("3 Month")
                          ->
                        format("Y-m-d H:i:s");
                        //2018-07-01 00:00:00 

                        Kommentar

                        Lädt...
                        X