Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Prüfen des aktuellen Datum auf Bereich

    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

    Prüfen des aktuellen Datum auf Bereich

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

      Hallo, wie kann ich denn am einfachsten Prüfen, ob das aktuelle Datum zwischen zwei Bereichen liegt?

      Ich möchte dabei kein wirkliches Datum mit Jahr zum Prüfen angeben, sondern lediglich so etwas bspw.:

      dateIsBetween(10.3.,15.11);
      

      oder:

      dateIsBetween(16.11.,9.3);
      

      also nur Startdatum mit tag und Monat und das gleiche für das Enddatum.

      Edit:
      Also hoffe es ist verständlich, was ich erreichen möchte.

      mickym paul53 2 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @Ben1983 last edited by mickym

        @ben1983 Nutz halte eine Bibliothek. Ein Nachfolger der moments-Bibliothek ist dayjs

        const dayjs = require('dayjs');
        var isBetween = require('dayjs/plugin/isBetween');
        dayjs.extend(isBetween);
        var customParseFormat = require('dayjs/plugin/customParseFormat');
        dayjs.extend(customParseFormat);
        console.log(dayjs().isBetween(dayjs('10.3.','D.M.'), dayjs('5.11.','D.M.'), 'day', '[]'));
        

        2caa31ee-60b4-45b9-8db3-896c0fc82669-image.png

        Man kann natürlich auch das Rad neu erfinden. 😉

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

          @ben1983 sagte: dateIsBetween(10.3.,15.11);

          Wenn man erst den Monat und danach den Tag angibt (zweistellig), kann man einen Stringvergleich machen.

          const today = formatDate(new Date(), 'MM.DD');
          const dateIsBetwenn = today >= '03.10' && today <= '11.15')
          
          Ben1983 2 Replies Last reply Reply Quote 0
          • Ben1983
            Ben1983 @paul53 last edited by

            @paul53 sagte in Prüfen des aktuellen Datum auf Bereich:

                                                                                                                                        const today = formatDate(new Date(), 'MM.DD');                                                                                                                                                                            const dateIsBetwenn = today >= '03.10' && today <= '11.15')                                            
            

            OK, das klingt gut und logisch, aber man muss noch abfragen rein bringen,
            denn der start kann ja auch am 11.11. sein und das ende am 01.01.

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

              @paul53 sagte in Prüfen des aktuellen Datum auf Bereich:

              const today = formatDate(new Date(), 'MM.DD');

              SO ist es in allen Varianten abgefngen..

              Danke

              function dateIsBetween(startday, startmonth, endday, endmonth){
                  const today = formatDate(new Date(), 'MM.DD');
                  const startdate = formatDate(new Date(new Date().getFullYear(),startmonth - 1, startday), 'MM.DD');
                  const enddate = formatDate(new Date(new Date().getFullYear(),endmonth - 1, endday), 'MM.DD');
                  // Wenn das Enddatum >= dem Start ist, so sind sie aus dem gleichen Jahr
                  if(enddate >= startdate){
                      return (today >= startdate && today <= enddate);
                  }
                  // An sonsten, sind es unterschiedliche Jahre
                  else{
                      return (today >= startdate && today >= enddate ||
                              today <= startdate && today <= enddate);
                  }
              }
              

              Edit:
              Ich überlege gerade, ob ich nicht doch einfach eine Eingabe des Start und Enddatums in der Vis mache.
              Da müsste man allerdings wieder das Jahr angeben und bspw. wenn das enddatum überschritten wird, um ein jahr addieren.... dann würde es sich selbst "incrementieren" und nicht am Jahr hängen.

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

                @mickym so wie es aussieht macht die datejs nichts anderes,
                als den von @paul53 beschriebenen Stringvergleich.
                Oder berücksichtigt es noch die Jahresübergänge?

                Ich habe mich jetzt entschieder, das Date Widged aus der Vis zu nutzen.
                Daraus ergibt sich bspw.
                "2023-11-05"
                Diesen String übergebe ich meiner Funktion und vergleiche so sie Daten.
                wird das enddatum überschritten, so werden ein Jahr vor datiert. klappt super.

                // Funktion zum Prüfen, ob der aktuelle Moment zwischen zwei Daten ist
                function nowIsBetween(startdate, enddate, useCompleteDeate){
                    const today = new Date();
                    const start = new Date(startdate);
                    const end = new Date(enddate);
                    if(useCompleteDeate){
                        start.setHours(0);
                        start.setMinutes(0);
                        start.setSeconds(0);
                        end.setHours(23);
                        end.setMinutes(59);
                        end.setSeconds(59);
                    }
                    return (today >= start && today <= end);
                }
                
                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                919
                Online

                31.9k
                Users

                80.1k
                Topics

                1.3m
                Posts

                3
                6
                222
                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