Please Note: This article is written for users of the following Microsoft Word versions: 2007, 2010, and 2013. If you are using an earlier version (Word 2003 or earlier), this tip may not work for you. For a version of this tip written specifically for earlier versions of Word, click here: Calculating Dates with Fields.

Calculating Dates with Fields

by Allen Wyatt
(last updated October 16, 2017)

3

Aidan asked if it is possible to calculate dates using fields. Seems he wants a date that is two weeks in the future, and thought there must be an easy way to calculate such a future date using fields. Unfortunately, there is no easy way. While Word allows you to do simple calculations using numeric values in fields, it does not allow you to perform such calculations using dates instead of numbers.

You can, however, pull dates apart into their intrinsic portions (months, days, and years), and then do your calculations, but this introduces whole new problems. All of a sudden you need to be concerned with what happens when you "roll" past the end of a month or year. The math involved in doing such a calculation is not trivial. As an example, consider the following compound field:

{QUOTE "{SET Delay "14"}{SET "DaysInMonth" {IF {DATE \@ "MM"}
<> 2 {=ROUND(30.575*{DATE \@ "MM"},0)-ROUND(30.575*{= {DATE \@
"MM"} –1},0)}{IF {=MOD({DATE \@ "yy"|, 4)} > 0 "28" "29"}}}{SET
"NextMonth" {IF {DATE \@ "MM"} = 12 "1/97" "{= {DATE \@ "MM"}
+ 1}/97}}{IF {= {REF Delay} + {DATE \@ "dd"}} <= {DaysInMonth}
{DATE \@ "MMMM {= {REF Delay} + {DATE \@ "dd"}}, yyyy"}{QUOTE
"{NextMonth \@ "MMMM"} {= {REF Delay} + {DATE \@ "dd"} –
{DaysInMonth}}, {IF {DATE \@ "MM"} <> 12 {DATE \@ "yyyy"}{DATE
\@ "{= 1 + {DATE \@ "yyyy"} \# "xxxx"}" }}}}"}

This will return the date in two weeks time (specified in the first line where the Delay value is set. The drawback, of course, is the compound nature of the field—there are over 30 different fields just within this compound field! Even this implementation, as formidable as it looks, will not handle leap years correctly in all instances. (It won't handle leap years correctly in century years divisible by 400.)

Is there an easy way to calculate future dates? Yes, there is—simply use macros. With just a couple of simple instructions you can make short work out of otherwise difficult date calculations. This was covered in an earlier WordTips; you can also find information at the following Word MVP page:

http://wordmvp.com/FAQs/MacrosVBA/DateOfPrevMonth.htm

WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (8660) applies to Microsoft Word 2007, 2010, and 2013. You can find a version of this tip for the older menu interface of Word here: Calculating Dates with Fields.

Author Bio

Allen Wyatt

With more than 50 non-fiction books and numerous magazine articles to his credit, Allen Wyatt is an internationally recognized author. He  is president of Sharon Parq Associates, a computer and publishing services company. ...

MORE FROM ALLEN

Jumping to a Specific Page

Want to jump to a particular page in your document? Word makes it easy; just pull up the Go To tab of the Find and ...

Discover More

Pop-Up Comments for Graphics

Excel allows you to add comments to individual cells in a worksheet, but what if you want to add comments to graphics? ...

Discover More

Count of Underlined or Struck-Through Words

When working with documents (particularly those prepared by others) it is not unusual to need to count words that possess ...

Discover More

Learning Made Easy! Quickly teach yourself how to format, publish, and share your content using Word 2013. With Step by Step, you set the pace, building and practicing the skills you need, just when you need them! Check out Microsoft Word 2013 Step by Step today!

More WordTips (ribbon)

Converting Field Results to Text

Fields are meant to be dynamic, providing a result based on conditions at the time they are updated. You may want to ...

Discover More

Inserting a Cross-Reference to the Last Style on a Page

It is often helpful to reference a specific heading in the header or footer of a page, and have that reference change on ...

Discover More

Inserting Fields

Fields are used for a variety of dynamic purposes in a document. There are a couple of ways you can easily insert fields, ...

Discover More
Subscribe

FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."

View most recent newsletter.

Comments

If you would like to add an image to your comment (not an avatar, but an image to help in making the point of your comment), include the characters [{fig}] in your comment text. You’ll be prompted to upload your image when you submit the comment. Maximum image size is 6Mpixels. Images larger than 600px wide or 1000px tall will be reduced. Up to three images may be included in a comment. All images are subject to review. Commenting privileges may be curtailed if inappropriate images are posted.

What is one more than 5?

2013-08-30 10:20:27

Abdulhameed

Hello,
i am using MS Word 2010, and i want to insert date but one month back instead of the actual (today) month.

please assist.


2013-07-17 05:47:32

Chris

I have used the code shown above (as added by Andrew Evans) in several documents that we send to customers. It has never let me down and, once you get used to the elements that need changing, you can set the delay to be pretty much whatever you want it to be. The word MVPs are very clever people!


2013-07-16 04:40:57

Andrew Evans

This is out of a Date Calc document by a Paul Edstein I downloaded through a Microsoft help site. It has loads of useful date field calculations
{QUOTE
{SET Delay 14
{SET a{=INT((14-{DATE @ M}/12}}
{SET b{={DATE @ yyyy}+4800-a}}
{SET c{={DATE @ M}+12*a-3}}
{SET d{DATE @ d}}
{SET jd{=d+INT((153*c+2)/5)+365*b+INT(b/4)-INT(b/100)+INT(b/400)-
32045+Delay}}
{SET e{INT((4*(jd+32044)+3)/146097}}
{SET f{=jd+32044=INT(146097*e/4}}
{SET g{=INT((4*f+3)/1461}}
{SET h{=f-INT(1461*g/4}}
{SET i{=INT((5*h+2)/153}}
{SET dd{=h-INT((153*i+2)/5)+1}}
{SET mm{=i+3-12*INT(i/10)}}
{SET yy{=100*e+g-4800+INT(i/10)}}
"{dd}-{mm}-{yy}" @ "dddd, d MMMM yyyy"}


This Site

Got a version of Word that uses the ribbon interface (Word 2007 or later)? This site is for you! If you use an earlier version of Word, visit our WordTips site focusing on the menu interface.

Newest Tips
Subscribe

FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."

(Your e-mail address is not shared with anyone, ever.)

View the most recent newsletter.