2007

Jan

1

Av

FileMaker har en mängd inbyggda funktioner för att räkna med, t.ex. för att räkna med datum. Internt räknar FileMaker med antal dagar från 1 jan år 1 så för att räkna antal dagar mellan 2 datum behöver du bara använda formeln: slutdatum – startdatum (där slutdatum är senare än startdatum).

Lite svårare blir det om du vill räkna antal månader mellan 2 datum, en sådan formel ser ut så här:

12*( Year(slutdatum) - Year(startdatum) ) + 
( Month(slutdatum) - Month(startdatum) )

Formeln beräknar först antal år mellan de båda datumen och multiplicerar antal år med 12 och lägger sedan till antal månader mellan datumen. Funktionen Month tar inte hänsyn till årtalet.

En vanlig beräkningsfunktion är att räkna ut ålder, använd formeln:

Year(dagensdatum) - Year(Födelsedatum) - 
If(dagensdatum < Date(Month(Födelsedatum);
Day(Födelsedatum);Year(dagensdatum));1;0)

Formeln beräknar först antal år mellan dagens datum och födelsedatum och subtraherar 1 om födelsedagen inte infallit under innevarande år.

13 kommentarer till ”Räkna med datum”

  1. Dennis Andersson

    Hej!
    Jag har ett problem med datum mm.
    Jag vill ha hjälp med denna beräkning:

    HämtatDatum+(AntalTab-AntPerDag)=TarSlutDatum

    Mitt närminne är dåligt och FileMaker hjälper mig att hålla reda på mycket. Jag har provat och läst en del men jag får det inte att fungera.

    Hoppas att Ni kan hjälpa mig.

    Vänligen Dennis

    Reply
  2. Rolf

    Hej!

    Om du vill beräkna hur långt något räcker, t.ex. hur många dagar en ask tabletter för medicinering räcker, antalet tabletter med antalet som måste tas om dagen. Antag att asken innehåller 24 tabletter och du äter 3 om dagen, då räcker asken 24/3 = 8 dagar.

    Beräkningfunktionen kan då vara:
    TaSlutDatum = HämtatDatum + (AntalTabletter / AntalPerDag)

    Du får då vilket datum tabletterna tar slut.

    /Rolf

    Reply
  3. Addo

    Hej Rolf

    Jag har problem med att omvandla datum från datum fältet till text fältet!

    T.ex om datumet är 2008-04-24 i datum fältet men jag vill att det ska kopieras till text fält med formen 20080424 hur blir beräkningen då??
    Jag har använt mig av denna bärkningen men utan att lyckas

    Right ( Filter ( Datum; “1234567890″) ;2 )&”" &Middle ( Filter ( Datum; “1234567890″) ;4;2) &”" & Left ( Filter ( Datum; “1234567890″) ;2))

    Tack för hjälpen

    Mvh Addo

    Reply
  4. Rolf

    Hej!

    I så fall hade jag använt formeln:

    Substitute(GetAsText(Datum);”-”;”")

    som raderar alla bindestreck.

    /Rolf

    Reply
  5. Anders

    Hej!
    Har problem med att flytta fram ett datumfält en månad. Om jag t e x har angett 2011-01-31 och sedan vill öka med en månad. Fungerar ju bra fram till den 28:e varje månad. Men om man vill ange den sista varje månad. Finns det någon lösning för det?

    Mvh
    Anders

    Reply
  6. Rolf

    Hej!

    Hur man kan få fram sista datumet i en månad kan du läsa om här:
    http://www.filemakerbloggen.se/…/…atum-i-manaden

    Vill du lägga till en månad till ett datum använder du formeln:
    Date(month(datum)+1;day(datum);year(datum))
    men, som du säger, så flyttas t.ex 31 april fram till 1 maj med automatik (eftersom 31 april inte finns).

    /Rolf

    Reply
  7. Dennis Andersson

    Jag har ett annat problem, har försökt med olika lösningar men får det inte att fungera.
    Jag har två fält:
    mediciner::skapades Tidstämpel
    mediciner::datum Datum
    Min dag slutar 02:30 så jag vill att datum skall vara en dag tidigare om tiden är mellan 00:00:00 och 02:30:00
    Jag har försökt med denna formeln, men det fungerar inte.
    If ( Hour ( skapad ) < 2 ; GetAsDate ( skapad ) ; GetAsDate ( skapad )-1 )
    Jag har diabetes så jag använder denna i kolhydratsberäkningen, mitt dygn är lite annorlunda eftersom jag lägger mig mellan 01:00 och 03:00

    Vänligen Dennis

    Reply
  8. Dennis Andersson

    Hej!

    Jag tror att jag löste det:

    If ( Hour ( skapad ) = 0 or Hour ( skapad ) = 1 or Hour ( skapad ) = 2 ; GetAsDate ( skapad )-1 ; GetAsDate ( skapad ) )

    Tror att det skall vara rätt.

    \\dennis

    Reply
  9. Sven

    Jag vill räkna Dagens datum – Slutdatum för att få fram hur många dagar det är kvar till Slutdatumet. Men jag kan inte inte vilken funktion jag skall använda i beräkningen.

    Jag kan skapa ett fält som uppdateras med dagens datum när man öppnat databasen och plocka det där ifrån. Men om databasen är öppen i en vecka, så funkar den lösningen dåligt. Någon som vet hur man gör det bättre?

    Reply
  10. Sven

    Löste det med Slutdatum – Get(AktuelltDatum). Fick detta inte att fungera först men måste ha gjort något fel då och rätt denna gången :)

    Reply
  11. Sven

    Inser nu efter ett par veckor att Slutdatum-Get(AktuelltDatum) inte fungerar som jag har tänkt.

    För att det skall fungera så måste jag gå in i varje post, ställa mig i fältet Slutdatum och går ur fältet för att beräkningen skall göras.

    HUr gör jag för att få Filemaker att uppdatera beräkningen, i alla fall en gång om dagen automatiskt?

    Reply
  12. Sven

    Automatisk uppdatering av datumberäkning.

    Tanken är att kunna se vilka av deltagarna som har kortast tid kvar innan medlemsavgiften skall betalas.

    Jag har två fält, Slutdatum och Kortasttidkvar och vill att beräkningen skall ske automatiskt och synas i fältet Kortasttidkvar.

    I fältet Slutdatum matar man in ett datum.
    Fältet Kortasttidkvar sätts som beräkning och beräkningen Slutdatum-Get(AktuelltDatum) används.

    Nu till själva tricket.
    I dialogrutan för beräkning så finns knappen Tillval för index. Där kan man boka ur Lagra inte beräkningsresultatet.

    Varje gång man sorterar eller gör något som berör Kortasttidkvar så beräknar Filemaker om resultatet.

    Enkelt när man kan det. Hoppas på att fler kan hitta detta inlägg och ha nytta av informationen :)

    Reply
    • Rolf

      FileMaker sparar normalt beräkningsresultat för att det ska kunna indexeras och inte behöva räknas om vid varje tillfälle det används. Ett beräkningsresultat räknas bara om i de fall något fält i beräkningen ändrar innehåll.

      Använder du något värde som hämtas med en Get-funktion, t.ex. Get (AktuelltDatum), behöver beräkningen uppdateras varje gång den används (eller i ditt fall i alla minst en gång per dag). Väljer du att inte lagra beräkningsresultatet (med kryssrutan i Tillval för index) beräknas värdet varje gång fältet används, dvs. i ditt fall hämtas dagens datum varje gång vilket gör att din beräkningsformel kommer att fungera.

      Det man får tänka på är att fältet blir icke-indexerat, dvs. sökningar i fältet går långsamt.

      Reply

Skriv en kommentar

  • (will not be published)
  • 5 + one =

Läs också: