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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Anzahl der Tage nach Datum

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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
                  • T
                    TT-Tom @metaxa last edited by

                    @metaxa

                    Ich würde sagen die Schreibweise des Datums ist falsch. dd/mm/yyyy

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

                      @tt-tom ich habe mich nach der Beschreibung auf der npm Seite gehalten:
                      66fcceaa-647e-42a0-a632-65df6eacfc13-image.png
                      oder wie meinst du das?

                      T 1 Reply Last reply Reply Quote 0
                      • metaxa
                        metaxa @metaxa last edited by metaxa

                        @metaxa sagte in Anzahl der Tage nach Datum:

                        Funktion Zeitraum_Tage_1 --> Ergebnis 96 (richtig)

                        Ich habe rasch mit Excel nachgerechnet, da kommen aktuell 94 Tage raus. Komisch ........

                        e23b18a0-ac25-4a6d-b149-9769fca3965a-image.png

                        =DATEDIF($C$5;$F$6;"d")
                        
                        T 1 Reply Last reply Reply Quote 0
                        • T
                          TT-Tom @metaxa last edited by

                          @metaxa
                          Bin von Date ausgegangen. Muss mir mal die npm Seite ansehen

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

                            @tt-tom sagte in Anzahl der Tage nach Datum:

                            die npm Seite

                            https://www.npmjs.com/package/duration

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

                              @metaxa bei mir kommen 96 raus. Formatierungensfehler der Zellen vielleicht.

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

                                @tt-tom sagte in Anzahl der Tage nach Datum:

                                bei mir kommen 96 raus.

                                Korrekt, in Excel habe ich es richtig gestellt, sorry mein Fehler. Ein Rätsel bleibt mir aber die Berechnung der duration function.

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

                                  @metaxa

                                  Ja das ist komisch. Komme aktuell nicht an mein Rechner, um selber zu testen.

                                  mickym 1 Reply Last reply Reply Quote 0
                                  • mickym
                                    mickym Most Active @TT-Tom last edited by mickym

                                    Das Problem ist, wenn Du bei Date nicht über eine Array initialisierst sondern Date mit dem normalen Konstruktor verwendest, (s. Date Funktion), dann wird der Januar mit Index 0 gezählt.

                                    18e36f61-dc9b-4a16-ac68-024854e0820b-image.png

                                    Siehe hier: https://www.w3schools.com/js/js_dates.asp

                                    Um also den 12.April 2022 zu bekommen musst Du beim Monat eines abziehen.

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

                                    Sprich in deinem 2. Beispiel berechnest Du die Tage seit dem 12. Mai 2022 anstelle des Aprils.

                                    Intern scheint bei einer Array Übergabe, dieses als String konvertiert zu werden siehe hier und somit in einen String konvertiert zu werden.

                                    2acf4b04-f375-44bf-aa7a-e3bd03f0478c-image.png

                                    Als String wird es dann wieder korrekt interpretiert:

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

                                    Wenn Du Dir das Datum als String ausgeben lässt, dann siehst Du es ja:

                                    var Duration = require("duration");
                                    
                                    // var duration = new Duration(new Date("2022,4,12"));
                                    // return duration.days;
                                    
                                    const d = new Date(2022,4,12);
                                    return d;
                                    

                                    ergibt dann:
                                    b9d7fd46-1747-456e-944c-6acd6e45da5b-image.png

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

                                      Sorry - für die Verwirrung -

                                      @metaxa Somit kannst Du Deinen Datenpunkt als String direkt der duration Bibliothek übergeben, da dann das Datum aus einem String gebildet wird:

                                      0be459bb-1dc7-4d4f-a721-b699b0c396f4-image.png

                                      Also sorry nochmal. Aber so ist es ja auch noch einfacher und spart sich die Umrechnerei halt komplett. Man muss halt nur darauf achten, dass der String das Format YYYY/MM/DD hat. Ich lerne auch jeden Tag dazu. 😉

                                      T metaxa 2 Replies Last reply Reply Quote 1
                                      • T
                                        TT-Tom @mickym last edited by

                                        @mickym sagte in Anzahl der Tage nach Datum:

                                        Man muss halt nur darauf achten, dass der String das Format YYYY/MM/DD hat.

                                        @metaxa
                                        das meine ich vor hin. Kann mir nur die Reihenfolge nicht merken.

                                        mickym 1 Reply Last reply Reply Quote 0
                                        • mickym
                                          mickym Most Active @TT-Tom last edited by

                                          @tt-tom Daran lags aber nicht. Der String im Datenpunkt ist ja richtig. Das Problem war, dass @metaxa das Datum direkt konstruiert hat und dann muss halt bei Monat 1 abgezogen werden, da die Monate mit Index 0 in Javascript beginnen.

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

                                            @mickym
                                            Ah, okay. Das Problem tritt aber nur auf, wenn man kein Enddatum angibt. Gruß Tom

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            940
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

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