Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Anzahl der Tage nach Datum

    NEWS

    • [erledigt] 15. 05. Wartungsarbeiten am ioBroker Forum

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Anzahl der Tage nach Datum

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

      Hallo,
      ich hätte gerne via Blockly die Anzahl der Tage vom 27.08.2021 bis heute immer aktuell ausgerechnet.

      Kennt da einer die Lösung ?

      Ich brauche den Wert um den Tagesstromverbrauch (kw/h) zu errechnen.

      schöne Grüße
      TheDuke

      mkshb OliverIO 2 Replies Last reply Reply Quote 0
      • mkshb
        mkshb @TheDuke last edited by mkshb

        Moin @theduke,

        konvertiere beide Daten in Millisekunden, rechne die Differenz aus und teile durch 86400000.
        (26.04.2022 = 16509710270000) - (27.08.2021 = 1630015200000) = 20908800000
        20908800000 / 86400000 = 242 Tage

        Blockly:

        <block xmlns="https://developers.google.com/blockly/xml" type="math_arithmetic" id="d.u7_y%xUhEXN5jEXMUd" x="-424.7499999999998" y="-383">
          <field name="OP">DIVIDE</field>
          <value name="A">
            <shadow type="math_number" id="5_SP@j1G$ZaS7t|_FS=9">
              <field name="NUM">1</field>
            </shadow>
            <block type="variables_get" id="|mNOgikc3~Cz^~a;*8``">
              <field name="VAR" id=":/OtTgN{LMHO~q|giE:P">Diff</field>
            </block>
          </value>
          <value name="B">
            <shadow type="math_number" id=",WYKnG6LK3P1TM[n9QP}">
              <field name="NUM">86400000</field>
            </shadow>
          </value>
        </block>
        

        TheDuke S 2 Replies Last reply Reply Quote 1
        • TheDuke
          TheDuke @mkshb last edited by

          @mkshb
          Vielen lieben Dank. Auf diesen Lösungsweg wäre ich nicht gekommen. Top.

          mkshb 1 Reply Last reply Reply Quote 1
          • mkshb
            mkshb @TheDuke last edited by

            @theduke
            Kein Problem, man hilft wo man kann.
            Aber noch eine Frage: Wofür genau brauchst Du die Tage um den Tagesverbrauch zu errechnen?

            TheDuke 1 Reply Last reply Reply Quote 0
            • TheDuke
              TheDuke @mkshb last edited by

              @mkshb

              Ich habe am 27.08.2021 einen neuen Stromzähler bekommen.
              Errechnen werde ich den Durchschnittsverbrauch.
              Also einfach Verbrauch / durch Tage .

              Die Betonung liegt auf einfach 😂

              Zum Schluß wird der Wert dann in einem Jahres Diagramm dargestellt mit dem Solarertrag .

              mkshb 1 Reply Last reply Reply Quote 0
              • mkshb
                mkshb @TheDuke last edited by

                @theduke

                Das erklärt es. Musst aber noch eine ganze Weile Daten sammeln bis Du vergleichen kannst. 😉

                Habe mich selbst kürzlich mit dem Thema beschäftigt und vielleicht ist sowas wie ein gleitender Durchschnitt (moving average) für Dich noch spannend.

                5f891db1-54a6-4041-8b58-aac5c5f0d9db-grafik.png

                crunchip 1 Reply Last reply Reply Quote 1
                • TheDuke
                  TheDuke last edited by

                  Ja das sieht ja mal geil aus. Aber passt leider nicht zu meinem stümperhaftem Rest optisch gesehen.
                  Und verstehen würde ich den Quellcode ja auch nicht 😁

                  Aber Danke.

                  1 Reply Last reply Reply Quote 1
                  • crunchip
                    crunchip Forum Testing Most Active @mkshb last edited by

                    @mkshb sagte in Anzahl der Tage nach Datum:

                    gleitender Durchschnitt (moving average)

                    wo bzw wie wird das eingestellt

                    mkshb 1 Reply Last reply Reply Quote 0
                    • mkshb
                      mkshb @crunchip last edited by

                      @crunchip sagte in Anzahl der Tage nach Datum:

                      @mkshb sagte in Anzahl der Tage nach Datum:

                      gleitender Durchschnitt (moving average)

                      wo bzw wie wird das eingestellt

                      Ist eine InfluxDB Funktion. Abfrage für die letzten 14 Tage in Grafana sieht dann so aus:

                      SELECT moving_average(difference(last("value")),14) FROM "0_userdata.0.Energiekosten.Stromzaehler" WHERE $timeFilter GROUP BY time(1d) fill(previous) tz('Europe/Berlin') 
                      
                      crunchip 1 Reply Last reply Reply Quote 1
                      • crunchip
                        crunchip Forum Testing Most Active @mkshb last edited by

                        @mkshb so ungefähr hatte ich es schon nach ein wenig suchen, nur die Zahl 14 wie in deinem Beispiel fehlte mir noch

                        1 Reply Last reply Reply Quote 1
                        • S
                          srkonus @mkshb last edited by srkonus

                          @mkshb said in Anzahl der Tage nach Datum:

                          Moin @theduke,

                          konvertiere beide Daten in Millisekunden, rechne die Differenz aus und teile durch 86400000.
                          (26.04.2022 = 16509710270000) - (27.08.2021 = 1630015200000) = 20908800000
                          20908800000 / 86400000 = 242 Tage

                          Blockly:

                          <block xmlns="https://developers.google.com/blockly/xml" type="math_arithmetic" id="d.u7_y%xUhEXN5jEXMUd" x="-424.7499999999998" y="-383">
                            <field name="OP">DIVIDE</field>
                            <value name="A">
                              <shadow type="math_number" id="5_SP@j1G$ZaS7t|_FS=9">
                                <field name="NUM">1</field>
                              </shadow>
                              <block type="variables_get" id="|mNOgikc3~Cz^~a;*8``">
                                <field name="VAR" id=":/OtTgN{LMHO~q|giE:P">Diff</field>
                              </block>
                            </value>
                            <value name="B">
                              <shadow type="math_number" id=",WYKnG6LK3P1TM[n9QP}">
                                <field name="NUM">86400000</field>
                              </shadow>
                            </value>
                          </block>
                          

                          Wie setze bzw. rechne ich ein bestimmtes Datum in Millisekunden um?

                          mickym 1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active last edited by

                            Man kann auch einfach die durations Bibliothek nutzen:
                            https://www.npmjs.com/package/duration

                            S 1 Reply Last reply Reply Quote 0
                            • S
                              srkonus @mickym last edited by

                              @mickym Wie kann ich das dann in Blockly nutzen?
                              Ich möchte meine gefahrenen Kilometer als Durchschnitt angezeigt bekommen. Was ich kenne ist der Leasingbeginn und die Gesamtkilometer. Den Durchschnitt pro Tag kann man ja errechnen, wenn man ausrechnet, wie lange das Leasing schon läuft.

                              mickym 1 Reply Last reply Reply Quote 0
                              • mickym
                                mickym Most Active @srkonus last edited by mickym

                                @srkonus OK - ich habe mal Quick & Dirty was für Dich gemacht:

                                9e2fdda6-3c9f-457c-8b8e-098b594ab1e7-image.png

                                Das Datum also in der Form (JJJJ,M,T) eingeben und Du bekommst die Tage bis heute raus. Man kann die Funktion natürlich noch aufbohren.
                                Also 11 Tage vergangen seit Beginn des Monats (1.7.2022 oder 2022,7,1) + 1 ist dann der 12.Tag heute.

                                Im JS Adapter muss man halt die duration Bibliothek mit aufnehmen.
                                73fa9f8f-58e9-4459-a985-2e47efabf039-image.png

                                Somit bekommst also zu jedem Datum in der Vergangenheit die vergangenen Tage sehr einfach. Im letzten Beispiel:

                                <xml xmlns="https://developers.google.com/blockly/xml">
                                 <variables>
                                   <variable id="m:)gvKQ,tVbet;-TV{5b">seit</variable>
                                 </variables>
                                 <block type="procedures_defcustomreturn" id="X!%2r7kCe4uVH:d}`32Y" x="113" y="63">
                                   <mutation statements="false">
                                     <arg name="seit" varid="m:)gvKQ,tVbet;-TV{5b"></arg>
                                   </mutation>
                                   <field name="NAME">Zeitraum_Tage</field>
                                   <field name="SCRIPT">dmFyIER1cmF0aW9uID0gcmVxdWlyZSgiZHVyYXRpb24iKTsKCnZhciBkdXJhdGlvbiA9IG5ldyBEdXJhdGlvbihuZXcgRGF0ZShzZWl0KSk7CnJldHVybiBkdXJhdGlvbi5kYXlzOw==</field>
                                   <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                                 </block>
                                 <block type="debug" id="Bb(Yc|=`6FU{/4[.C=1X" x="113" y="113">
                                   <field name="Severity">log</field>
                                   <value name="TEXT">
                                     <shadow type="text" id="|m|X_N`BiZ%InvfDMMwK">
                                       <field name="TEXT">test</field>
                                     </shadow>
                                     <block type="procedures_callcustomreturn" id="dQ61jfAA2hmi!M1mDqQo">
                                       <mutation name="Zeitraum_Tage">
                                         <arg name="seit"></arg>
                                       </mutation>
                                       <value name="ARG0">
                                         <block type="lists_split" id="TD,]mjs?,-6xPS{($oSZ">
                                           <mutation mode="SPLIT"></mutation>
                                           <field name="MODE">SPLIT</field>
                                           <value name="INPUT">
                                             <block type="text" id=".0|RaEZ@@!1(Ej099i-*">
                                               <field name="TEXT">2022,7,1</field>
                                             </block>
                                           </value>
                                           <value name="DELIM">
                                             <shadow type="text" id="#X%yFw`93sg7E2$ILJ_N">
                                               <field name="TEXT">,</field>
                                             </shadow>
                                           </value>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                 </block>
                                </xml>
                                

                                Ich bin mir zwar immer nicht sicher, ob die Funktion mit kommt. Ich bin bekannterweise kein Blockly-Fan, aber damit bekommt man die Tage nun ganz easy. Du kannst ja mit der Beschreibung der durations Bibliothek auch leicht andere Einheiten oder auch Zeiträume von bis definieren.

                                So kann man ja auch leicht den aktuellen Tag des Jahres berechnen usw.

                                eaf5c2a6-0fed-4df7-bc7f-872ea2a92081-image.png

                                Also 192 Tage vergangen seit dem 1.1. + 1 ist dann der 193.Tag heute.

                                Oder wie im Beipiel von @TheDuke halt der 27.8.2021 bis heute:

                                93cce102-46eb-4872-ac54-be7ec670f28b-image.png

                                also Stand heute (12.7.2022) - 319 Tage. 😉

                                Wie gesagt den Link zur Durations Bibliothek habe ich ja verlinkt, so dass man die Funktion beliebig komplex erweitern kann, wenn man

                                • andere Einheiten zurück haben will
                                  oder
                                • andere Zeiträume (von bis)

                                Das überlasse ich Dir aber dann (wollte hier nur eine Anregung zur Vereinfachung geben).

                                1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @srkonus last edited by mickym

                                  @srkonus sagte in Anzahl der Tage nach Datum:

                                  @mkshb said in Anzahl der Tage nach Datum:

                                  Moin @theduke,

                                  konvertiere beide Daten in Millisekunden, rechne die Differenz aus und teile durch 86400000.
                                  (26.04.2022 = 16509710270000) - (27.08.2021 = 1630015200000) = 20908800000
                                  20908800000 / 86400000 = 242 Tage

                                  Blockly:

                                  <block xmlns="https://developers.google.com/blockly/xml" type="math_arithmetic" id="d.u7_y%xUhEXN5jEXMUd" x="-424.7499999999998" y="-383">
                                    <field name="OP">DIVIDE</field>
                                    <value name="A">
                                      <shadow type="math_number" id="5_SP@j1G$ZaS7t|_FS=9">
                                        <field name="NUM">1</field>
                                      </shadow>
                                      <block type="variables_get" id="|mNOgikc3~Cz^~a;*8``">
                                        <field name="VAR" id=":/OtTgN{LMHO~q|giE:P">Diff</field>
                                      </block>
                                    </value>
                                    <value name="B">
                                      <shadow type="math_number" id=",WYKnG6LK3P1TM[n9QP}">
                                        <field name="NUM">86400000</field>
                                      </shadow>
                                    </value>
                                  </block>
                                  

                                  Wie setze bzw. rechne ich ein bestimmtes Datum in Millisekunden um?

                                  Ansonsten wenn Du lieber selber rechnen willst über die Methode von @mkshb - habe ich Dir im Blockly noch die andere Möglichkeiten angehängt (aktuelles Datum in ms und bestimmtes Datum in ms):
                                  807ef671-97b4-4e09-83a5-280a4071e1ad-image.png

                                  Du siehst auch hier kommt beim Datum vom 27.8.2021 leicht auf die Millisekunden:
                                  1630015200000 und damit auch auf 319 Tage, wie die duration Bibliothek ausgibt. Wenn Du also lieber selbst rechnen willst, kannst Du es auch ohne die Bibliothek easy tun.

                                  <xml xmlns="https://developers.google.com/blockly/xml">
                                   <variables>
                                     <variable id="m:)gvKQ,tVbet;-TV{5b">seit</variable>
                                   </variables>
                                   <block type="procedures_defcustomreturn" id="X!%2r7kCe4uVH:d}`32Y" x="-562" y="38">
                                     <mutation statements="false">
                                       <arg name="seit" varid="m:)gvKQ,tVbet;-TV{5b"></arg>
                                     </mutation>
                                     <field name="NAME">Zeitraum_Tage</field>
                                     <field name="SCRIPT">dmFyIER1cmF0aW9uID0gcmVxdWlyZSgiZHVyYXRpb24iKTsKCnZhciBkdXJhdGlvbiA9IG5ldyBEdXJhdGlvbihuZXcgRGF0ZShzZWl0KSk7CnJldHVybiBkdXJhdGlvbi5kYXlzOw==</field>
                                     <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                                   </block>
                                   <block type="debug" id="Bb(Yc|=`6FU{/4[.C=1X" x="-562" y="88">
                                     <field name="Severity">log</field>
                                     <value name="TEXT">
                                       <shadow type="text" id="|m|X_N`BiZ%InvfDMMwK">
                                         <field name="TEXT">test</field>
                                       </shadow>
                                       <block type="procedures_callcustomreturn" id="dQ61jfAA2hmi!M1mDqQo">
                                         <mutation name="Zeitraum_Tage">
                                           <arg name="seit"></arg>
                                         </mutation>
                                         <value name="ARG0">
                                           <block type="lists_split" id="TD,]mjs?,-6xPS{($oSZ">
                                             <mutation mode="SPLIT"></mutation>
                                             <field name="MODE">SPLIT</field>
                                             <value name="INPUT">
                                               <block type="text" id=".0|RaEZ@@!1(Ej099i-*">
                                                 <field name="TEXT">2021,8,27</field>
                                               </block>
                                             </value>
                                             <value name="DELIM">
                                               <shadow type="text" id="#X%yFw`93sg7E2$ILJ_N">
                                                 <field name="TEXT">,</field>
                                               </shadow>
                                             </value>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                     <next>
                                       <block type="debug" id="A7l5f!#=y2PF72?N3J?z">
                                         <field name="Severity">log</field>
                                         <value name="TEXT">
                                           <shadow type="text" id="+h!]x636x85Y2qVC2uu]">
                                             <field name="TEXT">test</field>
                                           </shadow>
                                           <block type="time_get" id="],CE@TAC+Oh8FUEA$2Y9">
                                             <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                             <field name="OPTION">object</field>
                                           </block>
                                         </value>
                                         <next>
                                           <block type="debug" id="g{Cu^@+4jhqS=hSeGH~7">
                                             <field name="Severity">log</field>
                                             <value name="TEXT">
                                               <shadow type="text" id="QqI0_2FCqpwW*D_jsC||">
                                                 <field name="TEXT">test</field>
                                               </shadow>
                                               <block type="convert_from_date" id="[oKNLVL,k4)^s/zD0-un">
                                                 <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                                 <field name="OPTION">object</field>
                                                 <value name="VALUE">
                                                   <block type="text" id="_O^?86yj_3.I$~FYD%*7">
                                                     <field name="TEXT">2021/8/27</field>
                                                   </block>
                                                 </value>
                                               </block>
                                             </value>
                                             <next>
                                               <block type="debug" id=":0fWS(#KtbA(kJ=dI+7L">
                                                 <field name="Severity">log</field>
                                                 <value name="TEXT">
                                                   <shadow type="text" id="M^i[sWHMx~peyj/P*X$,">
                                                     <field name="TEXT">test</field>
                                                   </shadow>
                                                   <block type="math_round" id="=gloh%t#7j(;OS_Y+;Mp">
                                                     <field name="OP">ROUNDDOWN</field>
                                                     <value name="NUM">
                                                       <shadow type="math_number" id="xN484bNwbqTuVYC7|Z03">
                                                         <field name="NUM">3.1</field>
                                                       </shadow>
                                                       <block type="math_arithmetic" id="tG0~nBi^eEhKj[c~eWFa">
                                                         <field name="OP">DIVIDE</field>
                                                         <value name="A">
                                                           <shadow type="math_number" id="E(rxg^}]Pw[!I106|Ll:">
                                                             <field name="NUM">1</field>
                                                           </shadow>
                                                           <block type="math_arithmetic" id="xL1)6P%OmSlVH{6=){(f">
                                                             <field name="OP">MINUS</field>
                                                             <value name="A">
                                                               <shadow type="math_number" id="u`j1SY@jpw.]hVP#lUW4">
                                                                 <field name="NUM">1</field>
                                                               </shadow>
                                                               <block type="time_get" id="[JsB^D7A]Y{X$75E{(fT">
                                                                 <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                                                 <field name="OPTION">object</field>
                                                               </block>
                                                             </value>
                                                             <value name="B">
                                                               <shadow type="math_number" id="jwV97|MDF+K*dFN*#@u%">
                                                                 <field name="NUM">1</field>
                                                               </shadow>
                                                               <block type="convert_from_date" id="vlZ[bRTj6!r;NV+d!x[o">
                                                                 <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                                                 <field name="OPTION">object</field>
                                                                 <value name="VALUE">
                                                                   <block type="text" id="D6.e]0/+UTZ)aPTqKOvn">
                                                                     <field name="TEXT">2021/8/27</field>
                                                                   </block>
                                                                 </value>
                                                               </block>
                                                             </value>
                                                           </block>
                                                         </value>
                                                         <value name="B">
                                                           <shadow type="math_number" id="FI2=Q!iks[mhY!SgR/=v">
                                                             <field name="NUM">86400000</field>
                                                           </shadow>
                                                         </value>
                                                       </block>
                                                     </value>
                                                   </block>
                                                 </value>
                                               </block>
                                             </next>
                                           </block>
                                         </next>
                                       </block>
                                     </next>
                                   </block>
                                  </xml>
                                  

                                  S 1 Reply Last reply Reply Quote 0
                                  • S
                                    srkonus @mickym last edited by

                                    @mickym Mega - Vielen Dank! Jetzt muss ich das nur noch irgendwie in eine Variable bekommen und kann damit weiter rechnen.

                                    mickym 1 Reply Last reply Reply Quote 0
                                    • mickym
                                      mickym Most Active @srkonus last edited by

                                      @srkonus Na das sollte doch wirklich kein Problem sein, Du musst doch den Block - statt dem debug output nur einer Variablen zuweisen:

                                      19178f2d-fb0a-4ef9-b8f8-d7692de32242-image.png

                                      S 1 Reply Last reply Reply Quote 0
                                      • S
                                        srkonus @mickym last edited by

                                        @mickym Habe es mit "Schreibe Objekt ID" gemacht. Morgen einmal nachschauen, ob das "Tage Seit" sich automatisch aktualisiert oder ich einen CRON Job einrichten muss.

                                        T 1 Reply Last reply Reply Quote 0
                                        • T
                                          TT-Tom @srkonus last edited by TT-Tom

                                          @srkonus

                                          Startest du das Script automatisch neu, wenn nicht, wird sich nach dem ersten Durchlauf nichts mehr ändern.

                                          Entweder Triggern oder ein CRON halt.

                                          Gruß Tom

                                          metaxa 1 Reply Last reply Reply Quote 1
                                          • metaxa
                                            metaxa @TT-Tom last edited by

                                            Mit Interesse habe ich diesen Thread gelesen und versuche ihn für meine Zwecke umzusetzen.

                                            Irgendetwas mache ich falsch, die Berechnung von @srkonus (danke für den npm - link) stimmt, meine eigene aber nicht.

                                            25308528-0321-4164-9008-52e5a69dd9c6-image.png
                                            c28a00ce-f04d-45b4-ade4-2409f945f7f5-image.png

                                            Funktion Zeitraum_Tage_1 --> Ergebnis 96 (richtig)

                                            var Duration = require("duration");
                                            
                                            var duration = new Duration(new Date(seit));
                                            return duration.days;
                                            

                                            Funktion Zeitraum_Tage_2 --> Ergebnis 66 (falsch)

                                            var Duration = require("duration");
                                            
                                            var duration = new Duration(new Date(2022, 04, 12));
                                            return duration.days;
                                            

                                            Warum bitte?

                                            T metaxa 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            565
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            8
                                            48
                                            2795
                                            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