Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [GELÖST] Zeitdifferenz berechnen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [GELÖST] Zeitdifferenz berechnen

    This topic has been deleted. Only users with topic management privileges can see it.
    • peterk34
      peterk34 last edited by peterk34

      Kann mir wer im Verständnis helfen?

      in folgendem Script errechne ich die Differenzen zwischen zwei Zeiten ... etwa 01:00 - 06:00 oder auch über Mitternacht also 23:00 - 3:00. Soweit so gut ...
      Wenn ich aber das Ergebnis mit formatDate formatiere oder mit getHours oder getMinutes berechne muss ich die Differenzzeit um genau eine Stunde vermindern damit es stimmt ... warum ?

      Besten Dank

      // berechnet und formatiert Differenz zwischen Zeiten
      // Zeiten immer in SS:mm oder SS angeben, Sekunden werden nicht berechnet
      // mögliche Formate: SS:mm (default), SS, mm, Min (Differenz in Minuten)
      {
          var myresult;
          DifferenzZeit = getDateObject(Zeit_bis).getTime() - getDateObject(Zeit_ab).getTime();
          if (isNaN(DifferenzZeit)) console.error('Berechnung der Zeitdifferenz nicht möglich. Angabe der Zeiten korrekt?');
          // Wenn Zeit bis kleiner Zeit ab ist
          // geht über Mitternacht
          if (DifferenzZeit < 0) DifferenzZeit = DifferenzZeit + 86400000;
          switch (Format) {
              case 'SS:mm':
                  myresult = formatDate(getDateObject(DifferenzZeit - 3600000), "hh:mm");
                  break
              case 'SS':
                  myresult = getDateObject(DifferenzZeit - 3600000).getHours();
                  break
              case 'mm':
                  myresult = (getDateObject(DifferenzZeit - 3600000).getMinutes());
                  break
              case 'Min':
                  myresult = DifferenzZeit / 60000;
                  break
              case 'MS':
                  myresult = DifferenzZeit;
                  break
              default:
                  myresult = formatDate(getDateObject(DifferenzZeit - 3600000), "hh:mm");
                  break
          }
          return myresult;
      }
      
      peterk34 paul53 2 Replies Last reply Reply Quote 0
      • peterk34
        peterk34 @peterk34 last edited by

        könnte das an der Sommerzeit liegen?

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @peterk34 last edited by paul53

          @peterk34 sagte: Wenn ich aber das Ergebnis mit formatDate formatiere

          ... dann funktioniert es, denn formatDate() berücksichtig, dass kleine Werte (vor 01.01.2000) Differenzen sind. Bei großen Werten wird die Zeitzone berücksichtigt:

          Bild_2022-10-14_120054563.png

          peterk34 1 Reply Last reply Reply Quote 0
          • peterk34
            peterk34 @paul53 last edited by

            @paul53

            cool

            var diff = (getDateObject(end).getTime()-getDateObject(start).getTime());
            log (formatDate(diff,'hh:mm'));
            log (formatDate(getDateObject(diff),'hh:mm'));
            

            ergibt ...

            a6a6d725-b741-40db-a013-e672538b00ef-image.png

            macht mans so wie du, passts ...
            macht mans im blockly wirds wie das zweite Ergebnis

            paul53 peterk34 2 Replies Last reply Reply Quote 0
            • paul53
              paul53 @peterk34 last edited by

              @peterk34 sagte: macht mans im blockly wirds wie das zweite Ergebnis

              Ja, das ist bekannt.

              peterk34 1 Reply Last reply Reply Quote 0
              • peterk34
                peterk34 @peterk34 last edited by peterk34

                habs jetzt so umgebaut da bei getMinutes() gehts ohne das getDateObject nicht ..

                    DifferenzZeit = getDateObject(Zeit_bis).getTime() - getDateObject(Zeit_ab).getTime();
                    if (DifferenzZeit < 0) DifferenzZeit = DifferenzZeit + 86400000;
                    if (new Date().getTimezoneOffset() == -120) sommerzeit = 3600000;
                    else sommerzeit = 0;
                    switch (Format) {
                        case 'SS:mm':
                            myresult = formatDate(getDateObject(DifferenzZeit - sommerzeit), "hh:mm");
                            break
                        case 'SS':
                            myresult = getDateObject(DifferenzZeit - sommerzeit).getHours();
                            break
                        case 'mm':
                            myresult = getDateObject(DifferenzZeit - sommerzeit).getMinutes();
                
                1 Reply Last reply Reply Quote 0
                • peterk34
                  peterk34 @paul53 last edited by

                  @paul53

                  Dankeschööön

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  586
                  Online

                  31.9k
                  Users

                  80.1k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  423
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo