Question

I have an CV and would like to automatically update my age when opening. So, what formula should I insert in a MS Word field?

Something like:

{= {DATE} - {"01/01/1983"} }

Was it helpful?

Solution

This is one of the better sites for working with Word field codes - http://www.addbalance.com/usersguide/fields.htm - and there are examples there on how to create +/- dates.

Here's how you would calculate based of a birth month of January and birth year of 1983.

{IF{DATE\@"MM"} >= 01 { = {DATE\@"YYYY"} – 1983 \#"00"} { = {DATE\@"YYYY"} – 1984 \#"00"}}

Note that in the case of the month of January, this IF statement will always be true and give you =YEAR-1983. You can use another nested IF statement to check on the day to further get more accurate.

OTHER TIPS

I tried but could not find in Word fields the equivalent of the Excel way to substract a daytime from another one (let’s say 05/18/1983 from today 03/21/2013) which is easy in Excel since a daytime (01/01/1900 in Excel 2013) has been chosen as the beginning and every other day since is calculated according to this reference, the shown details only being a way of representing this result (full date, month in figures or its full name, or even the simple number of Excel), which can be toggled by right clicking on the cell and choosing the category cell format (since 01/01/1900 is 1, then 05/18/1983 is 30454 (...and also 00/01/1900 is 0!)).

To answer the initial question, I suggest this writing:

{= {DATE  \@ "YYYY"} - my_year - 1*{=OR({={DATE  \@ "MM"} < my_month};{=AND({={DATE  \@ "MM"} = my_month};{={ DATE  \@ "dd"} < my_day})})}  \* MERGEFORMAT}

bearing in mind:

  1. that curly brackets {} are Word specifics symbols (not normal ‘letters’) and should be inserted by pressing CTRL+F9.
  2. 'my_year', 'my_month' (twice) and 'my_day': should be numbers
  3. this writing is quite short, and suggest only 4 changes (unfortunaletly the month twice), which would help preventing errors
  4. for the beginners, this writing says: today's year minus my_year, and substract one if either today's month value is lower than my_month or both is equal and today's day value is lower than my_day, so that we do not have added one year in excess.

The MERGEFORMAT option is useful to keep the correct format.

Also, for those who are not used to working with Word fields:

  • right clicking on the text inside curly brackets {} and choosing “Toggle Field Codes”, switches from the code itself (texte inside) or the result of the calculus of this code, but that may not be up to date (may be a previous result also the code has been changed).
  • to make sure the result are up to date, right click and choose “Update Field”.
  • and to make sure you open every field inside a master field, select the whole field (better select the whole line containing it), right click and choose “Toggle Field Codes” (otherwise, some fields that are badly coded or that may return a void expression, may not be seen and may affect the seeing result later on when not wanted).

That would do for 05/18/1983 (I changed 1st of January, which is 01/01 to 18th of avoid confusion):

{= {DATE  \@ "YYYY"} - 1983 - 1*{=OR({={DATE  \@ "MM"} < 05};{=AND({={DATE  \@ "MM"} = 05};{={ DATE  \@ "dd"} < 18})})}  \* MERGEFORMAT}

I would suggest calculating a serial number for both dates and subtracting them from each other. It doesn't have to be too involved: we're only interested in the number of years anyway. year*365 + month*31 + day should do nicely here.

For the number of years divide the difference by 365. Then strip the fractional part using INT (not ROUND which would make you 1 year older half of the year).

{ = INT(({ DATE \@"YYYY" }*365 + { DATE \@"MM" }*31 + { DATE \@"dd" } 
      - (my_year*365 + my_month*31 + my_day)) / 365) \# "0" }
  1. Create the text form field. Name the field as "BirthDate"

enter image description here

  1. Create the field with the following code:

{={DATE \@ "yyyy"} — {BirthDate \@ "yyyy"}}

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top