# Microsoft Word: Calculate number of days between two dates #

In Excel, it's very simple to calculate the number of days between two dates by simply subtracting one cell from the other, e.g., entering `=(B2-B1)` in B3 below:

 Arrival: 1/1/22 Departure: 2/1/22 Days: 31

While Word supports basic formulas in tables (Table Tools → Layout → Data → Formula), date handling is unsupported; the formula above returns "0.0".

You can of course embed or link an Excel worksheet into a Word document, but there are issues with formatting, layout, and performance.

Field codes allow for calculating dates in Word, but aren't for the faint of heart. Paul Edstein/macropod's Microsoft Word Date Calculation Tutorial (mirror) is the definitive guide; here's a taste from the section entitled "Calculate the # Days Difference Between Two Dates":

``````{=
{SET a{=INT((14-{EndDate \@ M})/12)}}
{SET b{={EndDate \@ yyyy}+4800-a}}
{SET c{={EndDate \@ M}+12*a-3}}
{SET d{EndDate \@ d}}
{=d+INT((153*c+2)/5)+365*b+INT(b/4)-INT(b/100)+INT(b/400)-32045}
-
{SET a{=INT((14-{StartDate \@ M})/12)}}
{SET b{={StartDate \@ yyyy}+4800-a}}
{SET c{={StartDate \@ M}+12*a-3}}
{SET d{StartDate \@ d}}
{=d+INT((153*c+2)/5)+365*b+INT(b/4)-INT(b/100)+INT(b/400)-32045}
\# ,0}``````

More on fields:

VBA's DateDiff function offers a more straightforward approach: simply insert two Date Picker Content Controls and one Rich Text Content Control (Developer → Controls), then add the following VBA code:

``````Sub CalculateDaysBetweenDates()
Dim days As Integer, date1 As Date, date2 As Date
date1 = ActiveDocument.ContentControls(1).Range
date2 = ActiveDocument.ContentControls(2).Range
days = DateDiff("d", date1, date2)
ActiveDocument.ContentControls(3).Range = days
End Sub

Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
' Update days when focus leaves Content Control box
Call CalculateDaysBetweenDates
End Sub``````

If there are additional fields or formulae in the table, add `ActiveDocument.Fields.Update` under `Call CalculateDaysBetweenDates` to update them as well.

Rather than referring to the Content Controls numerically based on their location in the document, you can specify their UIDs instead:

1. Click the desired Content Control to reveal the 3 dot tab to the left, then click on the tab.

2. Run this VBA code to display the CC's UID:

``````Sub GetUniqueID()
MsgBox Selection.ContentControls(1).ID
End Sub``````
3. Replace the numeric CC reference in the CalculateDaysBetweenDates subroutine with the corresponding UID, e.g., `ActiveDocument.ContentControls(1).Range``ActiveDocument.ContentControls("1247527479").Range`

/windows | Aug 28, 2022

Subscribe or visit the archives.