Calculating age from year

Viewing 3 reply threads
  • Author
    Posts
  • October 6, 2020 at 3:56 PM #42159

    Stefan de Graaf
    Participant

    Good day! I’ve been experimenting with Tap Forms and really like the flexibility so far. Working on my first forms, but I can’t seem to figure this out:

    I currently have a number-field with a year in it (called “Year”). Then I added a calculation-field (called “Age”) which should use that field to determine the age of the item. What I tried:

    YEARS(NEWDATE(Year; 1; 0; 0; 0; 1; 0; 0; 0); TODAY())

    But the age-field stays empty (also tried all of the result types). I also tried converting the year-field to an actual date (although I don’t really need a date for this) and trying this, but also no result:

    YEARS(Year;TODAY());

    Anyone have an idea what I’m doing wrong? Also it would be great if I could get an example for an actual date-field and for a number-field as I’ll need both in my forms, but can’t seem to get either to work. I’ve also added screenshots of both tries and the field settings

    Thanks in advance for the help!
    Best regards,
    Stefan

    Attachments:
    You must be logged in to view attached files.
    October 7, 2020 at 1:06 AM #42171

    Sam Moffatt
    Participant

    In Try 1 you have Year as a number (good) and Age as a date (incorrect). You need the calculation field to be a number because the ages is going to be a number. That said date should have still shown up but still been wrong. I copied what you put on the forum, replace “Year” with the field placeholder for my form and it works when set to number.

    In Try 2 you have an extra colon at the end of your calculation field. I created a date field and calc field also set to number which seemed to work properly for my tests.

    Calculation fields are a little touchy at times and can give you an empty result without any feedback. I generally prefer script fields because it’s a little more obvious what the error is, that said it’s not all that friendly:

    var year_date_field = record.getFieldValue('fld-060389f539934aa9b7163c7a8b7a4cd1');
    parseInt((new Date() - year_date_field) / 1000 / 60 / 60 / 24 / 365.25)

    Essentially we take the current date from the year_date_field (it’s a date field, a number field would need to be converted from a year to a date like the calc field does) and then that gives us the difference in milliseconds. We need to convert that to years which is the division operations there. The parseInt piece is to convert it to a whole number, alternatively you could replace parseInt with Math.floor as well.

    Hopefully that helps!

    October 7, 2020 at 5:45 AM #42190

    Stefan de Graaf
    Participant

    Thank you very much Sam! Both suggestions seem to work now (figured out that the first one worked all along but apparantly it doesn’t always recalculate the value when you adjust the calculation. when I changed the Year field, it did show up.. oops..).

    And I didn’t even notice the script field (thanks for that suggestion!), otherwise I would’ve tried that as well. Might also be a nice way to generate text like “1 year, 10 months, 3 days ago”. Looks like it uses (some variant) of javascript, so that should be doable. Will try that tonight!

    Thanks again for the help and quick reply!

    October 7, 2020 at 5:44 PM #42203

    Sam Moffatt
    Participant

    Good to hear you got it sorted, recalculation is a little magical but should happen when the field changes. If you suspect something funky, you can always hit the refresh button below the record that will trigger a recalc of all calc fields in the record (script fields too). Sometimes useful for flushing out the gremlins.

    The script field is a front end to Apple’s JavaScript Core which is itself an implementation of ECMAScript 2015 (or later?). Script fields behave like calculation fields but execute Javascript and there is also a form script which can be executed on demand.

    Apple’s JavaScript Core doesn’t have stuff outside the ECMAScript standard that you’d expect to see commonly from web browsers but the core standard JavaScript is accessible. To interact with Tap Forms is a specific JavaScript API that gives you access to some of the internals of Tap Forms. I have some examples on my GitHub of JavaScript and there is also the Script Talk forum focused on JavaScript. If you’re a beginner, T. L. Ford’s got a Tap Forms Javascript Scripting 101 tutorial too.

Viewing 3 reply threads

You must be logged in to reply to this topic.