4 Antworten Neueste Antwort am Apr 26, 2016 1:50 PM von grafzahl

    Datum Berechnung

    DanielKlaar

      Hallo zusammen,

      ich habe folgendes Problem. Ich möchte aus folgenden Werten ein Datum errechnen, ist das überhaupt möglich?

      Ich habe folgende Felder:

      Tag der Woche= 1 oder "Sonntag"

      KalenderWoche=08

      Jahr=2016

      Jetzt möchte ich ein Feld (Datum oder Text) wie folgt haben:

      Sonntag; 28.2.2016

       

      Ich kann mir vorstellen das das geht, aber bei dem Bereich Mathe gebe ich ab.

       

      Vielen Dank für konkrete Lösungen.

        • 1. Re: Datum Berechnung
          Markus Schneider

          mit FileMaker Pro Advanced kann man sogenannte eigene Funktionen erzeugen (cf, custom functions). Diese sind der Schluessel fuer Berechnungen (fast) jeglicher Art.

          es gibt Bilbliotheken mit all den Funktionen, die bisher erzeugt wurden - zB bei briandunning.com

           

          hier ist eine Funktion, die aufgrund Wochennummer, Tag der Woche und dem Jahr ein Datum berechnet (gibt wahrscheinlich noch weitere ahnliche Funktionen)

           

          FileMaker Custom Function:DayWeekYear2Date ( dayNR ; weekNR ; yearNR )

           

          um die Funktion einzusetzen ist die Advanced Version noetig

           

          die oben erwaehnte Funktion liefert mal ein Datum - mit den Kalenderfunktionen und den Darstellungsoptionen im Inspektor kann dann der Rest erledigt werden

          • 2. Re: Datum Berechnung
            DanielKlaar

            Vielen Dank für die schnelle Info, scheitert aber derzeit an der fehlenden Advanced Version.

            • 3. Re: Datum Berechnung
              peterbouma

              FMP Advanced ist für einen seriösen Developer sehr zu empfehlen, aber in diesem Fall nicht unbedingt notwendig. Man kann dies ohne Custom Function lösen.

               

              Nehmen wir an es gibt in Ihrem Database die folgenden Felder:

               

              T = TagDerWoche (Nummer, enthält 1..7 für So..Sa, wie FM die definiert hat)

              W = Wochennummer (in europäischer/ISO Rechnung)

              J = Jahr

               

              Montag gilt in unserem Teil der Erde als erster Tag der Woche (laut ISO), deshalb ist Sonntag der letzte Tag, obwohl die Funktion DayOfWeek() dafür 1 ergibt. Woche 1 ist in ISO die erste Woche die mindestens 4 Tage im neuen Jahr hat, d.h. der 1. Januar ist nicht immer in Woche 1. Das ist z.B der Fall in 2016. Der 4. Januar ist aber immer in Woche 1, und kann deshalb als Referenz genommen werden um ein anderes Datum im selben Jahr zu errechnen.

               

              Ein Berechnungsfeld (Typ Datum) mit folgender Formel wird das richtige Datum ergeben:

               

              Let([

                   // der 4. Januar ist immer in Woche 1:

                   ~jan4 = Date ( 1 ; 4 ; J ) ;

               

                   // berechne den Montag in Woche 1 (bemerke: könnte im vorigem Jahr sein):

                   ~monday1 = Int( ( ~jan4 - 1 ) / 7 ) * 7 + 1 ;

               

                   // berechne Offset für day of week, laut ISO (Montag = Beginn der Woche)

                   // 1->6, 2->0, 3->1, 4->2, 5->3, 6->4, 7->5

                   ~offsetday = Mod( T + 5 ; 7 ) ;

               

                   // Offset für Wochennummer:

                   ~offsetweek = ( W - 1 ) * 7

              ];

                   GetAsDate( ~monday1 + ~offsetday + ~offsetweek )

              )

               

              Nicht implementiert: check für Fehler in der Eingabe (leere Felder, Unsinn usw.).

              Vielleicht heissen die Funktionen im deutschsprachigen FM anders, aber die kenne ich nicht, ich arbeite meistens auf englisch oder niederländisch .

              Ich hoffe daß dies für Ihr Problem noch behilflich sein kann.

              Gruß,

              Peter Bouma, Amsterdam

              • 4. Re: Datum Berechnung
                grafzahl

                Ich habe da mal eine CF geschrieben: FileMaker Custom Function:CF.DotwCwYearToDate ( DOTW ; CW ; Y )

                 

                Du kannst das auch in eine Formel packen und die Variablen durch die entsprechenden Felder ersetzen.

                 

                SetzeVars (

                [

                F = LiesAlsDatum ( "01.01." & Y ) ;

                L = LiesAlsDatum ( "31.12." & Y ) ;

                TDJ = TagDesJahres ( L ) ;

                W = ( ( WocheImFiskaljahr ( L ; 1 ) - CW + 1 ) * 7 ) - DOTW

                ] ;

                 

                F + ( TDJ - W )

                 

                )

                 

                Der Parameter Y ist das Jahr, CW ist die Kalenderwoche und DOTW die Wochentagzahl (wobei 1 gleich Montag ist).

                 

                Gruß

                Thomas