0% found this document useful (0 votes)
24 views18 pages

DateCalc V2 - 85

This document provides comprehensive guidance on manipulating date and time in Microsoft Word using field coding, covering various date fields like DATE, CREATEDATE, SAVEDATE, PRINTDATE, and TIME. It includes techniques for inserting dates, converting between calendar systems, calculating future or past dates, and handling specific scenarios like weekends and holidays. The document also explains how to customize date formats and perform calculations relevant to mail merges and document templates.

Uploaded by

fdc20062340
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views18 pages

DateCalc V2 - 85

This document provides comprehensive guidance on manipulating date and time in Microsoft Word using field coding, covering various date fields like DATE, CREATEDATE, SAVEDATE, PRINTDATE, and TIME. It includes techniques for inserting dates, converting between calendar systems, calculating future or past dates, and handling specific scenarios like weekends and holidays. The document also explains how to customize date formats and perform calculations relevant to mail merges and document templates.

Uploaded by

fdc20062340
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 18

WORD Date & Time Manipulation: Tips & Techniques

INTRODUCTORY NOTES..................................................................................................1
Using this document..........................................................................................................1
Viewing and updating fields..............................................................................................1
Date input/output formats.................................................................................................1

DATE FIELD BASICS.......................................................................................................2


DATE/TIME field syntax.....................................................................................................2
The DATE field....................................................................................................................4
The CREATEDATE field.....................................................................................................4
The SAVEDATE field..........................................................................................................4
The PRINTDATE field.........................................................................................................4
The TIME field.....................................................................................................................4

INSERT A DATE WITH ORDINAL NUMBERING...................................................................4


JULIAN DAY NUMBERS, GREGORIAN AND JULIAN CALENDARS........................................4
CONVERT A GREGORIAN CALENDAR DATE TO A JULIAN DAY NUMBER............................4
CONVERT A JULIAN DAY NUMBER TO A GREGORIAN CALENDAR DATE............................5
CONVERT A JULIAN DAY NUMBER TO A JULIAN CALENDAR DATE...................................5
CONVERT A JULIAN CALENDAR DATE TO A JULIAN DAY NUMBER...................................5
CONVERT A GREGORIAN CALENDAR DATE TO A JULIAN CALENDAR DATE......................5
CONVERT A JULIAN CALENDAR DATE TO A GREGORIAN CALENDAR DATE.....................5
FIND THE DAY OF THE WEEK OF A GREGORIAN CALENDAR DATE.................................5
CONVERT A JULIAN DAY NUMBER OR JULIAN DATE TO A DAY OF THE WEEK...............5
FIND THE DAY OF THE YEAR FOR A GIVEN DATE..........................................................6
FIND THE DATE FOR A GIVEN DAY OF THE YEAR..........................................................6
AUTOMATICALLY INSERT A PAST OR FUTURE DATE.......................................................6
Calculate a month, using n months delay.......................................................................6
Calculate a month and year, using n months delay........................................................6
Calculate a month and year, using n years delay...........................................................6
Calculate a day, date, month and year, using n years delay..........................................6
Calculate a day, date, month and year, using n months delay......................................6
Calculate a lease expiry date, using n months delay.....................................................6
Calculate a day, date, month and year, using n days delay...........................................7
Calculate a day, date, month and year, using n weeks delay........................................7
Calculate the day & date of the last or nth-to-last day of this month............................7
Calculate the day & date of the nth day of next month..................................................7
Calculate the day & date of a given day of the week next month..................................7
Calculate the day & date of a given day of the week, n days in advance.....................7

HANDLING WEEKENDS AND HOLIDAYS IN CALCULATED DATES.......................................7


CHANGING DOCUMENT DATES DURING THE COURSE OF A DAY.........................................8
INTERACTIVELY CALCULATE A PAST OR FUTURE DATE..................................................8
WORKING WITH DATES BEFORE 1 JAN 1901 OR AFTER 31 DEC 4095...........................8
DATE AND TIME CALCULATIONS IN A MAILMERGE..........................................................9
DATE AND TIME CALCULATIONS IN A WORD FORM.........................................................9
DATE AND TIME CALCULATIONS IN A TABLE...................................................................9
EXPRESS TODAY’S DATE IN FISCAL YEAR TERMS...........................................................9
CALCULATE THE # DAYS DIFFERENCE BETWEEN TWO DATES.......................................10
CALCULATE THE # YEARS MONTHS & DAYS DIFFERENCE BETWEEN TWO DATES..........10
CALCULATE WHETHER A PERIOD HAS ELAPSED..........................................................10
INTERACTIVELY CALCULATE A PERSON’S AGE.............................................................11
CALCULATE A STEPPED DATE......................................................................................11
CALCULATE A STEPPED DATE RANGE..........................................................................11
CALCULATE A DATE SEQUENCE...................................................................................11
CALCULATE DATES OF EASTER...................................................................................12
USE DATE (AND/OR TIME) COMPARISONS TO VARY TEXT............................................12
Determine whether a document has expired.................................................................12
Use a date test to provide pre-printing instructions.....................................................12
Show or hide instructions & graphics at print time......................................................13
Vary instructions & prompts, based on Print/Save Dates............................................13
Vary text in a document, based on Print/Save Dates and the user’s name................13

CONVERTING NUMERIC DATE STRINGS INTO WORD DATE FORMATS.............................13


IMPORTING DATE AND TIME VALUES FROM EXCEL AND ACCESS...................................13
ADD OR SUBTRACT TWO TIME PERIODS......................................................................14
AUTOMATICALLY CALCULATE A PAST OR FUTURE TIME OF DAY..................................14
Add n Hours, Minutes & Seconds To a Starting Date & Time....................................14
WORD Date & Time Manipulation: Tips & Techniques

Introductory Notes
This document shows how to do a wide range of date and time calculations using Microsoft
Word, versions 97 and later, using field coding instead of macros. Whilst macros are
sometimes simpler to use, using fields avoids some of the security issues associated with
macros.
Using this document
In this document, the bookmarks used to create an example are often re-used in other
examples. A side effect of this is that the calculated dates and times in the examples will
display a result based on the last-bookmarked entry for each reference when this document
is first opened. This can be corrected by updating the affected fields (by selecting the field
and pressing F9, for example), and would not affect documents where the bookmark names
are not re-used.
You can change the behaviour of many of the DATE fields in this document by expanding the
field codes (see “Viewing and updating fields”) and changing the ‘DATE’ expressions to
‘CREATEDATE’, ‘SAVEDATE’ or ‘PRINTDATE’, according to what you are trying to achieve.
See “Date Field Basics” for more details on the effect of such changes.
Viewing and updating fields
To view the fields in this document, I recommended that you toggle field shading on. You can
do this via Tools|Options|View (Word 97-2003) or Word Options|Advanced>Show Document
Content (Word 2007) and, under ‘Show’, selecting the ‘Always’ or ‘When selected’ options.
You’ll probably find the ‘Always’ option works best. Doing this has no effect on the printed
output but makes the fields easier to find and work with on-screen.
To update a given field, simply select it and press F9. Most will update without any further
action on your part, but the interactive examples will prompt you for input(s).
To see the inner workings of any field, select the whole field and press Shift-F9. When
you’re done, pressing Shift-F9 again will toggle the display back to showing the field’s
results. Alternatively, if you press F9, the field will update and toggle the display back to
showing the field’s results in one go.
Many of the date and time field examples in this document have been laid out with line feeds
to better show their structure when the field code is toggled ‘on’. The line feeds are
inconsequential and can be deleted. Some fields also include hard spaces (ASCII value 160)
to keep the results on the same line. These can be replaced with soft spaces (ASCII value
32) if you prefer.
Date input/output formats
Many date fields in this document are region-dependent and are coded to work on systems
using day-month-year regional settings. For system using month-day-year regional settings,
obtaining a correctly result is as simple as changing the order of the embedded fields coded
as ‘{dd}-{mm}-{yy}’to ‘{mm}-{dd}-{yy}’. Included in this document is a macro to automate the
change. Changing the order shouldn't be necessary for systems using day-month-year
settings; for those using month-day-year settings, it's a once-only change. To run the macro,
Press Alt-F8 and select the macro named ‘SwapDayMonthCodes’, then click ‘Run’.
Most date fields in this document display their output in an extended European format (i.e.
‘dddd, d MMMM yyyy’). You can change the output format by changing the field’s date
picture switch. This is independent of your system’s regional settings. To change the output
format for the affected fields, place the cursor AFTER these instructions, then press Alt+F9 to
display all the field codes. Next, press Ctrl+H to bring up the Find/Replace box and enter:
‘dddd, d MMMM yyyy’ in the Find box; and your preferred format (eg ‘MMMM d, yyyy’) in the
Replace box, then click ‘Replace All’. When it reaches the end of the document, Word will

1
WORD Date & Time Manipulation: Tips & Techniques

ask if you want to continue from the beginning. Choose ‘No’; otherwise you’ll change these
instructions too.
Input formats tend to be flexible, permitting ‘d MMMM yyyy’, ‘d MM yyyy’, ‘M, d yyyy’, and so
on.

2
WORD Date & Time Manipulation: Tips & Techniques

Date Field Basics


Microsoft Word gives you the following types of date and time field to use in documents and
document templates:
 DATE
 CREATEDATE
 SAVEDATE
 PRINTDATE
 TIME
You can add these fields to a document or template via Insert|Date and Time or via Insert|
Field and choosing the ‘Date and Time’ option. The Insert|Field route offers a much richer set
of output options than the limited choice you’re offered via Insert|Date and Time.
DATE/TIME field syntax
Each of these fields gives a plethora of options for formatting the field’s output. So it’s
important to understand how each of these field works if you’re going to get the most
out of them. At the most basic level, the syntax for the various date and time fields
goes like:
{DATE \@ " Date-Time Format 'descriptive text' "}
Everything after the field name is optional.
The \@ is a field switch. It tells Word to use whatever follows to format the date or
time display. If you omit this (and the formatting codes), Word uses your computer’s
regional settings or whatever format you might have specified via Insert|Date and
Time|Default. The Date & Time format parameters can include years, months, days,
hours, minutes and (sometimes) seconds, plus descriptive text.
If you use more than one parameter to specify a Date & Time format, put a pair of
double-quotes around all of the parameters. For example, if you’re using dates, you
might want spaces, slashes or dashes separating the day, month and year. You might
also want to use colons to separate hours, minutes and seconds. Omit the double-
quotes and Word might display only part of the output.
Year
Displays a year as two or four digits, depending on how many letters ‘y’ you use. The
letter ‘y’ can be either uppercase or lowercase.

Parameter Displays Example


Y, YY, y or yy the year in two-digit form, with a leading 0 for years 00 or 25
to 09
YYYY or yyyy the year in four-digit form 2025
Month
Displays a month as one or two digits, as a three-letter abbreviation or in full,
depending on how many uppercase letters ‘M’ you use (lowercase letters ‘m’
represent minutes).

Parameter Displays Example


M the month in one-digit or two-digit form (i.e. no leading 0 3
for single-digit months)
MM the month in two-digit form 03
MMM the month as a three-letter abbreviation Mar

3
WORD Date & Time Manipulation: Tips & Techniques

MMMM the full name of the month March


Day
Displays a day of the month or the day of the week, depending on how many letters
‘d’ you use. The letter ‘d’ can be either uppercase or lowercase.

Parameter Displays Example


D or d the date of the month in one-digit or two-digit form (i.e. 13
no leading 0 for single-digit days)
DD or dd the date of the month in two-digit form 13
DDD or ddd the day of the week as a three-letter abbreviation Thu
DDDD or dddd the full name of the day of the week Thursday
Hour
Displays an hour of the day as one or two digits based on either a 12-hour clock or a
24-hour (military) clock, depending on whether you use an uppercase or lowercase
‘h’. A lowercase ‘h’ bases time on the 12-hour clock. An uppercase ‘H’ bases time on
the 24-hour (military) clock. You can also include ‘AM/PM’ in uppercase or lowercase.

Parameter Displays Example


h or H the hour in one-digit or two-digit form (i.e. no leading 0 0 or 0
for single-digit hours)
hh or HH the hour in two-digit form 00 or 00
am/pm or ‘AM’ or ‘PM’ AM
AM/PM
Note: You can change the AM and PM symbols Word uses by changing the
Time settings in the Windows Control Panel ‘Regional Settings’ dialog box.
For example, you could make the ‘am/pm’ parameter display as ‘a.m./p.m.’.
Minute
Displays the minute as one or two digits, depending on how many lowercase letters
‘m’ you use (uppercase letters ‘M’ represent months).

Parameter Displays Example


m the minute in one-digit or two-digit form (i.e. no leading 3
0 for single-digit minutes)
mm the minute in two-digit form 03
Second
Displays the second as one or two digits, depending on how many letters ‘s’ you use.
The letter ‘s’ can be either uppercase or lowercase.

Parameter Displays Example


S or s the second in one-digit or two-digit form (i.e. no leading 8
0 for single-digit seconds)
SS or ss the second in two-digit form 08
Note: Only the DATE and TIME fields support the ‘Second’ parameter.

4
WORD Date & Time Manipulation: Tips & Techniques

Descriptive Text
This can be any text that is enclosed in a pair of single quotation marks. For example,
you could add the string 'Greenwich Mean Time' or 'Australian Eastern Summer Time'
to the field. Note that the single quotation marks don’t display in the output.
So, how would you display an apostrophe, as in "Aug-14 ‘04"? Word’s help file
suggests you can use a single quote character for this (eg {DATE \@ "MMM-d, 'yy"})
but this doesn’t work, since the quote characters must be used in pairs. What does
work, however, is: {DATE \@ "MMM-d, {QUOTE 180}yy"}, as in Dec-12, ´09.
The DATE field
The DATE field inserts the current date into your document, and updates every time
you open the document or perform an action that causes the document fields to
update. This field is coded as {DATE} and the default format is 13/03/2025.
The CREATEDATE field
The CREATEDATE field inserts the date your document was created, and remains
unchanged unless you save the file using File|Save As. This field is coded as
{CREATEDATE} and displays as 24/03/2007 7:41 AM.
The SAVEDATE field
The SAVEDATE field inserts the date your document was last saved, and updates
whenever you save the document. This field is coded as {SAVEDATE} and displays
as
12/12/2009 12:59:00 PM.
The PRINTDATE field
The PRINTDATE field inserts the date your document was last printed, and updates
whenever you print the document. This field is coded as {PRINTDATE} and displays
as (this document has never been printed, hence the 0s).
The TIME field
The TIME field inserts the time date into your document, and updates every time you
open the document or perform an action that causes the document fields to update.
This field is coded as {TIME} and displays as 13/03/2025.

Insert A Date with Ordinal Numbering


The following field expresses today’s date in ordinal form, coupled with the day of the week –
with narrative text:
Saturday the 12th of December, 2009
Word fields ordinarily can’t display date ordinals with superscripting. The following example
shows how to overcome that limitation.
Saturday the 12th of December, 2009

Julian Day Numbers, Gregorian and Julian Calendars


Julian day numbers represent the number of elapsed days since the beginning of a cycle of
7,980 years. This system was invented by Joseph Justus Scaliger (1540-1609) in 1582 and
is typically used in astronomical calculations to overcome the fact that the solar year is not a
number of whole calendar days. Julian Day 0 under the:
 Gregorian Calendar, is 24 November 4714 BC.
 Julian Calendar, is 1 January 4713 BC.

5
WORD Date & Time Manipulation: Tips & Techniques

Convert a Gregorian Calendar Date to a Julian Day Number


The following field expresses today’s Gregorian calendar date as a Julian Day Number:
2,451,545

Convert a Julian Day Number to a Gregorian Calendar Date


The following field expresses today’s Julian Day Number as a Gregorian calendar date:
8 September 2009
Note: The Julian Day Number for this field is taken from the previous example.

Convert a Julian Day Number to a Julian Calendar Date


The following field expresses today’s Julian Day Number as a Julian calendar date:
8 September 2009
Note: The Julian Day Number for this field is taken from the previous example. Note
also that a simple weekday display would return the wrong weekday because,
although the weekdays are the same for Julian and Gregorian calendars, Julian
calendar dates don’t return the same weekdays on systems set up for the Gregorian
calendar.

Convert a Julian Calendar Date to a Julian Day Number


The following field expresses today’s Julian calendar date as a Julian Day Number:
2,451,545
Note: The Julian Day Number for this field is taken from the previous example and
gives the same result as for the Gregorian calendar date conversion.

Convert a Gregorian Calendar Date to a Julian Calendar Date


The following field combines the conversion of a Gregorian calendar date to a Julian Day
Number with a Julian Day Number to a Julian calendar date conversion to express a
Gregorian calendar date as the equivalent Julian calendar date:
Gregorian date Friday, 1 May 2009 is the same as Julian date Friday,
8 September 2009.
Note: The correct Julian calendar weekday (Friday) is obtained in the above field by
replicating the original Gregorian calendar weekday in the appropriate location.

Convert A Julian Calendar Date To A Gregorian Calendar Date


The following field combines the conversion of a Julian calendar date to a Julian Day
Number with a Julian Day Number to a Gregorian calendar date conversion to express a
Julian calendar date as the equivalent Gregorian calendar date:
Julian date Tuesday, 1 May 2009 is the same as Gregorian date Tuesday,
8 September 2009.
Note: The correct Julian calendar weekday (Tuesday) is obtained in the above field
by inserting the calculated Gregorian calendar weekday in the appropriate location.

Find The Day Of The Week Of A Gregorian Calendar Date


The following field returns the day of the week for a nominated date:
1 May 2009 was a Friday.

6
WORD Date & Time Manipulation: Tips & Techniques

Note: This field uses a custom numeric picture switch to generate the appropriate
future, past or present tense.

Convert A Julian Day Number Or Julian Date To A Day Of The Week


Although Word can express Gregorian calendar dates in a day of the week format, it
apparently can’t do so with Julian Day Numbers or Julian calendar dates. The following field
expresses today’s Julian Day Number as a day of the week:
Thursday
Thus, if you convert a Julian calendar date to a Julian Day Number, you can find the
corresponding day of the week.
Note: The Julian Day Number for this field is taken from the previous example.

Find The Day Of The Year For A Given Date


The following field returns the day of the year for today’s Gregorian calendar date:
Today’s date (Saturday 12 December 2009) falls on the 121st day of the year.

Find The Date For A Given Day Of The Year


The following field returns the Gregorian calendar date for today’s day of the year:
Day 346 in 2009 falls on Tuesday, 8 September 2009.
Note: The day of the year for this field is taken from the previous example.

Automatically Insert A Past Or Future Date


The following fields calculate any past or future date from today, based on the Gregorian
calendar. Setting the “Delay” variable in the fields allows for the required date to be many
days, months and/or years ahead or behind (the latter is achieved by expressing the “Delay”
variable as a negative number):
Calculate a month, using n months delay
October
Note: This field introduces a ‘/0’ divisor to get Word to interpret the result of
the calculation as a month.
Calculate a month and year, using n months delay
10-5053
Calculate a month and year, using n years delay
December 38535
Note: This field uses ASCII character 160 to insert a non-breaking space.
Calculate a day, date, month and year, using n years delay
12-12-38535
If, when the start date is the last day of the month, you need the end date to
be the last day of the month also even where the start month has less days
than the end month, you could use:
12-12-38535
Calculate a day, date, month and year, using n months delay
12-10-5053

7
WORD Date & Time Manipulation: Tips & Techniques

If, when the start date is the last day of the month, you need the end date to
be the last day of the month also even where the start month has less days
than the end month, you could use:
12-10-5053
Calculate a lease expiry date, using n months delay
12-10-5053
Calculate a day, date, month and year, using n days delay
12-10-5053
Note: To work with dates before 1 January 1901 or after 31 December 4095, see
”Working With Dates Before 1 Jan 1901 Or After 31 Dec 4095”, below.
Calculate a day, date, month and year, using n weeks delay
12-10-5053
Calculate the day & date of the last or nth-to-last day of this month
Thursday, 31 December 2009
Note: Increasing the ‘Subtract’ variable returns the nth-to last day of the month
(eg Subtract = 0 gives the last day of the month, while Subtract = 1 gives the
second-last day of the month). The field includes code to ensure that the
calculated day does not precede the 1st of the month.
Calculate the day & date of the nth day of next month
Thursday, 1 January 2009
Note: Increasing the ‘day’ variable returns the nth day of this month (eg day = 1
gives the 1st of the month, whilst day = 2 gives the 2nd of the month, and so
on). The field includes code to ensure that the calculated date does not
exceed the last day of next month.
Calculate the day & date of a given day of the week next month
Thursday, 1 January 2009
Note: The value in {SET Weekday 3} determines the day of the week to return
(0 = Mon, 1 = Tues, 2 = Wed, 3 = Thurs, 4 = Fri, 5 = Sat, 6 = Sun), while the
value in {SET Week 1} allows you to specify the week of the month. The ‘Limit’
variable is used to prevent the chosen date rolling over into the following
month. This also means that setting the Week variable to 5 will always return
the last instance of a given weekday occurring in a month.
To hard-code the field for a particular month, change the line
‘{SET Month {={DATE \@ M}+1}}’ to ‘{SET Month #}’, where # is the output
month. For example ‘{SET Month 3}’ will return a date in March.
Calculate the day & date of a given day of the week, n days in advance
The following field adds 90 days to today’s date, then finds the nearest
following 2nd or 4th Friday of the month. See the note from the previous topic
for details of how to set the weekday.
Thursday, 1 January 2009

Handling Weekends and Holidays in Calculated Dates


Sometimes, a calculated date will end up on a weekend, but you’ll want the displayed date to
be the previous Friday or the following Monday. The following fields build on the example
given in ‘Calculate a day, date, month and year, using n days delay’ to modify the calculated
date if it falls on a Saturday or Sunday.

8
WORD Date & Time Manipulation: Tips & Techniques

Previous Friday Following Monday


Thursday, 1 January 2009 Thursday, 1 January 2009
Toggling the field code shows how this is done; the Julian day number (jd) that forms part of
the field calculation is tested with a MOD function and is recalculated if the MOD value is
greater than 4 (ie 5 (Saturday) or 6 (Sunday)). The same approach can be taken with any of
the other fields in this document that use Julian day number functions to calculate a new
date.
Holidays add another dimension altogether. As well as dealing with holidays that fall on a
fixed date each year (eg Christmas & New Year) – and allowing for the preceding Friday or
following Monday being a holiday if such a holiday falls on a weekend – there are also
holidays that fall on, say, the first Monday of a given month. And then there is Easter. The
following fields build on the logic developed in the table above and draw on the examples in
‘Calculate the day & date of a given day of the week next month’ (above) and ‘Calculate
Dates Of Easter’ (page 13) to show how one might deal with such scenarios, using holiday
dates for the Australian Capital Territory.
Previous Business Day Following Business Day
Thursday, 1 January 2009 Thursday, 1 January 2009
Notes: The key to using such a field is knowing the logic used to determine the various
holiday dates, then encoding it. For example, if a holiday Monday follows the 1 st Friday of a
month (which might follow the 1st Monday), you’d calculate the Friday’s date then add 3 days
to that.

Changing document dates during the course of a day


In some organisations, correspondence produced after a certain time of day needs to be
given the next working day’s date. The following field increments the DATE once the time
reaches 1pm and, if this occurs on a Friday or Saturday, adjusts the calculated date to the
following Monday.
Thursday, 1 January 2009
Note: To change the time of day, edit the ‘12’ variable in the Delay statement.

Interactively Calculate A Past Or Future Date


The following examples use an ‘ASK’ field to get the starting date and delay from which to
calculate a past or future Gregorian calendar date:
If the starting date is Monday, 1 January 2001 and the offset is 1 day, then the new
date is Thursday, 1 January 2009.
Note: The field includes a test for whether the delay equals +/- 1 day, plus error-
checking code to validate the input.
or:
The starting date is Monday, 1 January 2001.
The offset is 1 days.
The new date is Thursday, 1 January 2009.
or:
The starting date is Monday, 1 January 2001.
The offset is
The new date is
Note: In the last of these examples, the fields are independent of each other and the
two rows do not automatically update when the starting date or delay is changed.
Wrapping the related fields with a QUOTE field, as in the penultimate example,
overcomes this.

9
WORD Date & Time Manipulation: Tips & Techniques

Working With Dates Before 1 Jan 1901 Or After 31 Dec 4095


If either date in a calculation could precede 1 January 1901 or follow 31 December 4095, the
following field can be used. It also takes account of the switch in calendars in 1582, when
Thursday 4th October 1582 (Julian) was followed by Friday 15th October 1582 (Gregorian). No
attempt has been made to deal with the leap-year confusion between 45 B.C. and 8 A.D.
If the starting date is Monday, 1 January 2001 A.D. and the offset is 1 days, then the
new date is Thursday, 1 January 2009 A.D.
Note: This field overcomes Word’s inability to recognise dates before 1 January 1901
and after 31 December 4095 by parsing the input string into day, month & year
variables. So, it is important to enter the date in the required format. As well as testing
for the calendar change in 1582, the field also deals with the absence of a 0 B.C. or
0 A.D; years before 1 A.D. are years B.C, so ‘1' is subtracted to get the correct year.

Date and Time Calculations In A Mailmerge


You can use most of the fields in this document in a mailmerge.All you need to do in most
cases is to add a reference to your mailmerge field and change the various ‘DATE’
references to suit.
For example, to do a date calculation in a mailmerge with an imported mergedate, you could
modify the example given in ‘Calculate a day, date, month and year, using n days delay’ by
changing the ‘DATE’ expressions in the original fields to ‘MERGEFIELD MergeDate’ (use
your own field names in place of ‘MergeDate’), as indicated below:
Thursday, 1 January 2009
If the delay is a variable that is included in the mailmerge, you could also replace {SET Delay
14} with {SET Delay{MERGEFIELD MergeDelay \# 0}}, again changing ‘MergeDelay’ to your
mailmerge delay field’s name.

Date and Time Calculations In A Word Form


You can use any of the fields in this document to perform calculations in a document
protected for forms. In most cases, all you need to do is to:
 add a reference to your formfield;
 set the formfield’s properties to ‘calculate on exit’; and
 change the various ‘DATE’ references to suit
before protecting the document for forms – via Tools|Protection|Forms.
For example, to do a date calculation in a form, you could modify the example given in
‘Calculate a day, date, month and year, using n days delay’ by changing the:
 ‘DATE’ expressions in the original fields to ‘FmDate’ (use your own field names in place
of ‘FmDate’);
 {SET Delay 14} fields to {SET Delay {=FmDelay}}, (again changing ‘FmDelay’ to your
delay formfield’s name),
as indicated in the field below (To use this example, copy the fields in the following
paragraph to a separate document and protect the document for forms):
0 Thursday, 1 January 2009

Date and Time Calculations in a Table


One of the limitations of Word’s formula handling in tables is its inability to evaluate text
strings, including dates and times. To get around this, you need to bookmark the contents of
the affected cells (not the cells themselves) and reference those bookmarks (instead of the

10
WORD Date & Time Manipulation: Tips & Techniques

cells) in the formulae. The following table demonstrates how to do this using ASK fields to
create the bookmarks:

Monday, 1-Jan-2001 1 Thursday, 1 January 2009

Express Today’s Date in Fiscal Year Terms


The following field expresses today’s date in fiscal year terms, showing the year, month #,
and week # within the month, assuming a 1 July to 30 June fiscal year:
Fiscal Year 09/10, Month: 6, Week: 2

Calculate the # Days Difference Between Two Dates


The following field subtracts the date in the StartDate bookmark (from a previous field) from
the date in the EndDate bookmark (turn ‘show bookmarks’ on to see it), and returns the
number of days’ difference as a positive or negative value:
StartDate: 1 January 2001 EndDate: 30 June 2002 Days Difference: 545
Note: The bookmarked dates can be in various formats, including mixed formats.
Both dates must be after 31 December 1900.

Calculate the # Years Months & Days Difference Between Two Dates
There are two approaches one might take to this issue, depending on whether you need an
approximation based on the number of days’ difference between two dates, or a more
accurate calendar-based approach that takes account of the actual days, months and years
involved.
The approximation below is based on a dividing the number of days difference between the
StartDate and the EndDate into a nominal number of 365.2425 day years (the average
length of a year using the Gregorian calendar) and converting the remainder into a
corresponding number of months and days, without regard to actual calendar months or leap
years:
1 Year, 5 Months, 28 Days.
In this field, if you need to include the StartDate (such as when calculating someone’s period
of employment), add 1 to the ‘Period’ value.
The equivalent calendar-based field, in which the calculation reflects the actual years months
and days, is:
1 Year, 5 Months, 29 Days.
In this field, if you need to include the StartDate (such as when calculating someone’s period
of employment), change the {SET sd {StartDate \@ d}} to {SET sd {={StartDate \@ d}-1}}.
Note: Both of the above fields get their inputs from the previous example.

Calculate Whether A Period Has Elapsed


You could modify the fields from the topic Calculate the # Years Months & Days Difference
Between Two Dates to calculate whether a pre-defined period has elapsed between two
dates. The following fields show another way:
The period from 28 February 2000 to 29 March 2005 is more than 5 years.
The period between 28 February 2000 and 29 March 2005, both dates inclusive, is more
than 5 years.

11
WORD Date & Time Manipulation: Tips & Techniques

The period between 28 February 2000 and 29 March 2005, both dates exclusive, is more
than 5 years.
Note: To change the number of years (5 in the above example), change the 5 in the
50000 to suit. To incorporate months and days, you can change the 2 nd & 3rd digits to
match the month and the 4 th & 5th digits to match the day – you’ll want to change the
text for the output to suit also.
The following field extends the first of the above calculations to interactively accommodate a
user-defined period that can be expressed in years, months and days:
The period from 28 February 2000 to 29 March 2005 is less than 5 year(s), 1 month(s) and 2
day(s).
Note: You need to be careful with how the ends of months are interpreted. The
formulae interpret these literally (i.e. if one month ends on the 30 th and the other ends
on the 31st, for example, the field ignores that and tests the 30th against the 31st).

Interactively Calculate A Person’s Age


The following field uses an ASK field to get your birth date, from which to calculate one’s
age:
If your Date of Birth was 1 January 1901, then your age is 108 Years, 4 Months and 0
Days.
Note: The above field includes error-checking code to validate the input. You wouldn’t
need such validation in a document protected for forms if the input comes from a
formfield formatted for date input, or for a mailmerge document using birth dates that
had been validated at the time of entry into the data source. Here’s an example of
what such a field might look like for calculating the age from a formfield that sets the
‘BirthDate’ bookmark and has its properties set to ‘calculate on exit’:
Your age is 108 Years, 4 Months and 0 Days.

Calculate a Stepped Date


The following field calculates a predetermined weekly date (in this case, [next] Sunday).
Saturday, 12 December 2009
Note: To change the day of the week on which the calculated result is based, change
the 6 in the statement {SET Weekday 6} to suit, using:
(0 = Mon, 1 = Tues, 2 = Wed, 3 = Thurs, 4 = Fri, 5 = Sat, 6 = Sun)

Calculate a Stepped Date Range


The following field calculates a date range that goes from this Thursday through to next
Wednesday. This would be useful in a template used for the creation of weekly reports.
Saturday, 12 December 2009 through Saturday, 12 December 2009
Note: As with the previous example, change the 3 in the statement {SET Weekday 3}
to suit the day of the week on which the calculated result is based. For a fortnightly
report, change the 7s in the statement {SET jd{=INT((jd)/7)*7+Weekday}} to 14 and
change the 6 in the statement {SET Delay 6} to 13. You may also need to add 7 to
the statement {SET Weekday 3} for a fortnightly report, so as to select the correct
starting week. Note also the use of ASCII 32 to create the text spaces.

Calculate a Date Sequence


The following fields calculate a sequence of dates starting from today:
Thursday, 13 March 2025

12
WORD Date & Time Manipulation: Tips & Techniques

Saturday, 12 December 2009


Saturday, 12 December 2009
Saturday, 12 December 2009
Saturday, 12 December 2009
Saturday, 12 December 2009
Note: The first field is a simple DATE field. The second field is taken from the
example at ‘Calculate a day, date, month and year, using n days delay’, with a 1-day
delay. The third and subsequent fields are all coded the same as each other and
simply take their starting values from the preceding field - you can use as many
copies as needed. If you use this approach in a table, be aware that table cells
update across then down. If you need to change the # days offset mid-stream, simply
add another {SET Delay #} field immediately after the ‘QUOTE’ string (see the second
field above for an example).

Calculate Dates Of Easter


The following field uses an algorithm developed by Samuel Butcher, Bishop of Meath, to
calculate dates of Easter for Western churches – Orthodox churches use a different
algorithm, with different results. Butcher’s algorithm holds for any year since 1582:
In 2009, the Western Easter Sunday fell on the (Gregorian) 12th of April.
Note: This field includes a test for whether the event has past. You could also
combine this field with an IF test and the equivalent Julian calendar calculations (see
the next example) to get valid Western Easter dates for 1582 and earlier.
Orthodox churches celebrate Easter on the basis of the Julian calendar. Until the Gregorian
calendar was introduced in 1582, Orthodox churches celebrated Easter Sunday on the same
date as Western churches. Since then, the Orthodox churches have often celebrated Easter
Sunday on different dates from Western churches. In some years the Orthodox Easter
Sunday occurs on the same day as the Western Easter Sunday. In most years, however,
Orthodox Easter follows Western Easter by at least one week. Calculating the Orthodox date
of Easter is much simpler than the Western date of Easter:
In the same year, the Orthodox Easter Sunday fell on the (Julian) 12th of December.
This equates to the (Gregorian) 19th of April.
Note: This field uses the year from the previous example, and adds a Julian to
Gregorian calendar conversion.
For those who are interested about the Orthodox Easter date calculation, in the above field:
G is the so-called “Golden Number”-1
I is the number of days from 21 March to the Paschal full moon
J is the weekday of the Paschal full moon (0=Sunday, 1=Monday, etc.)
I-J is the number of days from 21 March to the Sunday on or before the Paschal full moon.

Use Date (And/Or Time) Comparisons To Vary Text


Sometimes you might need to compare two dates so as to determine which is the greater.
For example, you might need to test whether a certain date has passed and use the result of
the test to trigger an expiry notice. The simplest way to do such a test is to express the dates
to be compared in yyyyMMdd format and subtract one from the other – as in the following
examples, some of which even include hours and minutes in the calculation.
Determine whether a document has expired
If the Expiry date is 01 May 2009 then this document has expired.

13
WORD Date & Time Manipulation: Tips & Techniques

Use a date test to provide pre-printing instructions


By placing a field like the following in a document, you can provide user instructions that will
disappear permanently the first time the document is printed:

Instructions
Instruction 1
Instruction Text
Instruction 2
Instruction Text
As shown, each of the paragraphs can have their own styles, so that the instructions appear
properly formatted.
Show or hide instructions & graphics at print time
An alternative to the previous example would be to hide the field whenever the document is
printed, but allow it to be restored later. The following field does just that:
Your instructions go here.
To output something at print-time that isn’t ordinarily visible, you could reverse the field logic,
thus:
[] – the field code is between the brackets.
Pressing F9 or print preview restores the display. However, since the PRINTDATE field
doesn't support seconds, you might have to wait up to a minute before you can restore the
display.
Vary instructions & prompts, based on Print/Save Dates
A variation on the previous example could be to compare the PRINTDATE and SAVEDATE
or DATE values and to display different instructions depending on whether the document has
been printed since it was last saved or since it was opened, respectively. For example:
Not Printed Since Last Save
Vary text in a document, based on Print/Save Dates and the user’s name
The next field remains invisible until the document is printed, by way of a PRINTDATE test,
and only prints if the user's name (UserName) isn't "My Name". The UserName is whatever
appears under Tools|Options|User Information.
[] – the field code is between the brackets.

Converting Numeric Date Strings Into Word Date Formats


Sometimes you might need to convert a date string (eg 20250313 or 130325) into one of
Word’s date formats. Such string formats sometimes appear in mailmerge source files. The
following fields show how you can do this conversion (using ASK fields instead of
MAILMERGE fields):
Friday, 1 May 2009
To format to a date string with an ordinal day number you could use a field coded like:
Friday, 1st May 2009
or, for a superscripting of the ordinal expression:
Friday, 1st May 2009

14
WORD Date & Time Manipulation: Tips & Techniques

The following field works with an input date in ‘ddmmyy’ or ‘dmmyy’ format.
Friday, 1 May 2009
Note: This last field only works with dates input as 5 or 6 digits, with 1 or 2 digits for
the day, 2 digits for the month and another 2 digits for the year. To make it work with
4-digit years, change the "00'-'00'-'00" string to "00'-'00'-'0000".

Importing Date and Time Values From Excel and Access


Excel and Access store dates as the number of days that have elapsed since 31/12/1899 1,
whilst times are expressed as the proportion of the day that has elapsed since midnight.
Thus, a combined date and time field has an integer part for the date and a decimal part for
the time.
For example, the date 1 January 2000 is stored as 36,526, whilst the time 12:13:14pm is
stored as 0.5091898148, because 12 hours (43,200 seconds) plus 13 minutes (780 seconds)
plus 14 seconds equals 43,994 seconds and this, divided by 24 hours (86,400 seconds),
equals 0.5091898148. Thus, 1 January 2000 12:13:14 is stored as 36526.5091898148.
So, if you import a serial date/time value into Word from Excel or Access, adding the integer
part to the date 31/12/1899 gives the date and multiplying the decimal part by 86,400 gives a
number of seconds since midnight – which can be expressed as a time of day.
To illustrate, let the ImportValue = 36526.5091898148. The field to turn this into a date and
time in Word is:
Saturday, 12 December 2009 @ 12:13:14 or Saturday, 1 January 2000 @ 12:13:14
p.m.

Add Or Subtract Two Time Periods


The following field calculates the sum of two time periods:
a) to a maximum of 24 hours each: 36:19:56;
b) if you need to use more than 24 hours for either time: 48:19:56; or
c) if you need to use more than 24 hours for both times: 60:19:56
The following field calculates the difference between two time periods:
a) to a maximum of 24 hours each: 11:10:04;
b) if you need to use more than 24 hours for either time: -00:49:56;or
c) if you need to use more than 24 hours for both times: : 11:10:04.
Note: A minor variation on the last of the additions can be used for both addition and
subtraction, by requiring the subtraction time components to be input as negative
values.

Automatically Calculate A Past Or Future Time of Day


The following field calculates a future time of day from now, according to the number of
hours, minutes and seconds delay specified, to a maximum of 24 hours, allowing also for the
possibility that the new time might be sometime tomorrow:
+1 1:55:30 a.m. or +1 01:55:30 (military time).
The following field calculates a past time of day from now, according to the number of hours,
minutes and seconds delay specified to a maximum of 24 hours, allowing also for the
possibility that the new time might be sometime yesterday:

1
Actually, for compatibility purposes Excel replicated a bug in Lotus 123, which had day 1 as 1 January 1900
but wrongly treated that year as a leap year. Unless you’re using dates from before 1 March 1900, this can be
ignored.

15
WORD Date & Time Manipulation: Tips & Techniques

-2:85:78 a.m. or +14:85:78 (military time).


Note: The same techniques that were employed to add or subtract two time periods
can be used here also if the source time periods might exceed 24 hours. Also note
that the a.m./p.m. designations used here are independent of your system’s regional
settings.

Add n Hours, Minutes & Seconds To a Starting Date & Time


The following field interactively calculates a future date and time, according to the number of
hours minutes and seconds input for adding to the starting date & time:
If the start is on Wednesday, 26 August 2009 at 20:09:47 and the offset to add is
13 hours, 20 minutes and 00 seconds, then the new date & time is Thursday,
27 August 2009 at 09:29:47.

*
© macropod 2003-09
§

16

You might also like