The Museum of HP Calculators


Calendar Functions the HP-67

This program is Copyright © 1976 by Hewlett-Packard and is used here by permission. This program was originally published in the HP-67 Standard Pac.

This program is supplied without representation or warranty of any kind. Hewlett-Packard Company and The Museum of HP Calculators therefore assume no responsibility and shall have no liability, consequential or otherwise, of any kind arising from the use of this program material or any part thereof.

Card Labels
Calendar Functions
Shift          
Label <>DT1 <>DT2 <>#Days <>#Wks.Dys DT→DOW
Key A B C D E

Overview

For the period March 1, 1900 through February 28, 2100, this program interchangeably solves for dates and days. Given two dates, the number of days between them can be calculated. Given one date and a specified number of days, a second date can be found. The program will also work in terms of weeks between dates or compute the day of the week given the date. After input of a date, its Julian Day number* is displayed.

A date must be input in mm.ddyyyy format. For instance, June 3, 1975 is keyed in as 6.031975. It is important that the zero between the decimal point and the day of the month be included when the day of the month is less than 10. Weeks are input and output as WKS.DYS. Seven weeks, three days would be 7.3. The day of the week is represented by the digits 0through 6 where zero is Sunday.

Equations

To compute the day number from the date:

Julian Day number = INT(365.25y') + INT(30.6001 m') 
                    + d + 1,720,982

where
           year-1  if m = 1 or 2
    y' =  or
           year    if m > 2

           month+13   if m=1 or 2
    m' =  or
           month+1    if m > 2

Then days between dates is found by

Days = Day number2 - Day number1

To compute the date from a day number:

Day # = Julian Day Number - 1,720,982

Y' = INT[(Day # - 122.1)/365.25)]

*The Julian Day number is an astronomical convention representing the number of days since January 1, 4713 B.C.

m' = INT[(Day # - INT(365.25 y'))/30.6001]

Day of the month = Day # - INT [365.25 y'] - INT [30.6001 m']

             m' - 13  if m' = 14 or 15
Month = m = or
             m' - 1   if m' < 14

        y'      if m > 2
year = or
        y' + 1  if m = 1 or 2

To compute the day of the week:

Day of the week = 7 x FRAC [(Day # + 5)/7]

Remarks

No checking is done to determine if input data represents valid dates.

In this program the calculator uses flag 3 to decide what to do after A, B, C or D is pressed. If the numeric keys have been pressed, flag 3 is on. This causes the value in the display to be stored as an input when the user-definable key is pressed. If no numeric keys have been touched, the program will calculate the value associated with the user-definable key. Thus, it is important not to touch the numeric keys between the last input and the attempt to calculate a result.

Registers R0-R2, RB, RD, RE and RS0-RS9 are available for user storage.

Instructions

Step Instructions Input Data/Units Keys Output Data/Units
1 Load side 1 and side 2.      
2 For day of the week calculations go to step 6.      
3 Input two of the following:      
     First date (mm.ddyyyy) DT1 A Day #1
     Second date (mm.ddyyyy) DT2 B Day #2
     Days between dates Days C Days
     or weeks between dates* Wks.Dys D Days
4 Calculate one of the following:      
     First date   A Day #1
     Second date   B Day #2
     Days between dates   C Days
     Weeks between dates   D Wks.Dys
5 For a new case go to step 2.      
6 Input date and calculate day of the week (0 = Sunday, 6 = Saturday). DT E DOW
7 For a new case go to step 2.      
  *Either days between dates or weeks between dates, but not both, may be input in step 3.      

Examples

Senior Lieutenant Yuri Gagarin flew Vostok I into space on April 12, 1961. On July 21, 1969 Neil Armstrong set foot on the moon. How many days had passed between the first manned space flight and the moon landing? How many weeks and days? On what day of the week did each event take place?

Keystrokes                     Outputs
4.121961 A 7.211969 B C         3022.     (days)
D                               431.5     (weeks.days)
4.121961 E                         3.     (Wednesday)
7.211969 E                         1.     (Monday)

A short term note is due in 200 days. If the issue date is June 11, 1976, what is the maturity date? (Some securities use a 30/360 day calendar while this program performs all calculations using the actual number of days. Do not use the program for financial purposes unless you are sure that actual calendar days are correct.)

Keystrokes                     Outputs
6.111976 A 200 C B            12.281976   (December 28,
                                          1976)

The Program

LINE  KEYS
001  *LBL A     Calculate Δdays and put control 3 in display.
002   RCL 4
003   RCL C
004   -
005   3
006   GTO 0
007  *LBL B     Calculate Δdays and put control 4 in display.
008   RCL 3
009   RCL C
010   +
011   4
012  *LBL 0     Store control code.
013   STO I
014   R↓        Store constants.
015   3
016   6
017   5
018   .
019   2
020   5
021   STO 5
022   3
023   0
024   .
025   6
026   0
027   0
028   1
029   STO 6
030   R↓        Return Δdays to display.
031   R↓
032   F3?       If data input, GTO 1.
033   GTO 1
034   STO (i)   Store Δdays according to control code.
035   1
036   2
037   2         Calculate y'.
038   .
039   1
040   -
041   RCL 5
042   ÷
043   INT
044   STO 9     Calculate m'.
045   RCL 5
046   ×
047   INT
048   RCL (i)
049   -
050   CHS
051   STO A
052   RCL 6
053   ÷
054   INT
055   STO 7     Calculate day of the month.
056   RCL A
057   X⇔Y
058   RCL 6
059   ×
060   INT
061   -
062   STO 8
063   RCL 7     Build (m'-1).dd part of display.
064   1
065   RCL 8
066   %
067   -
068   -
069   RCL 7     Correct m' -1 and y' to m and y.
070   1
071   4
072   ÷
073   GSB 2
074   RCL 9     Finish building mmm.ddyyyy result and
075   EEX       display final answer.
076   6
077   ÷
078   +
079   DSP 6
080   RTN
081  *LBL 1     Break date input into the individual
082   R↓        components of mm, dd, yyyy.
083   ENTER↑
084   INT
085   STO 7
086   -
087   EEX
088   2
089   ×
090   ENTER↑
091   INT
092   STO 8
093   -
094   EEX
095   4
096   ×
097   STO 9
098   RCL 7     m + 1
099   1
100   +
101   ENTER↑
102   1/X
103   .         m + 1 → m'
104   7
105   +         y → y'
106   CHS
107   GSB 2
108   RCL 6     Compute day number.
109   ×
110   INT
111   RCL 9
112   RCL 5
113   ×
114   INT
115   +
116   RCL 8
117   +
118   STO (i)
119   1         Compute julian day number for output.
120   7
121   2
122   0
123   9
124   8
125   2
126   +
127   DSP 0
128   RTN
129  *LBL 2     If input to this routine has absolute
130   INT       value 1 or greater:
131   STO + 9   y = y +/- 1
132   1         m = m +/- 12
133   2
134   ×
135   -         (+ for plus input)
136   RTN
137  *LBL C     Store input.
138   DSP 0
139   STO C
140   F3?       If input flag, stop.
141   RTN
142   RCL 4
143   RCL 3     Calculate Δdays and stop.
144   -
145   STO C
146   RTN
147  *LBL D     If input GTO 4.
148   F3?
149   GTO 4
150   GSB C
151   DSP 1     Compute Δdays.
152  *LBL 3
153   7         Convert to Δweeks.days format.
154   ÷
155   INT
156   LST X
157   FRAC
158   .
159   7
160   ×
161   +
162   RTN
163  *LBL 4
164   DSP 0     Convert Δweeks.days to days and store.
165   ENTER↑
166   INT
167   7
168   ×
169   X⇔Y
170   FRAC
171   1
172   0
173   ×
174   +
175   STO C
176   RTN
177  *LBL E     Calculate day number.
178   SF 3
179   RCL 5
180   5
181   GSB 0
182   RCL (i)   Change day number to modulo 7 number.
183   5
184   +
185   GSB 3
186   LST X
187   1
188   0
189   ×
190   RTN
191   R/S

Register Use

R3  Day #1
R4  Day #2
R5  365.25
R6  30.6001
R7  m
R8  d
R9  y
A   used
C   Δdays
I   control

Go back to the software library
Go back to the main exhibit hall