HP Forums

Full Version: (22s or 27s, 17b, etc) Calculate day of week from 1901 to 2099
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
On the HP 22s, with no branching or loops, little more than equations are possible on it. However, using a creatively written equation, it is possible to calculate the day of the week from 1901 to 2099 and also handle leap years.

To calculate the first day of a year, F, we use the following formula:

F=(IP( 1.25 x (Year + 3)) + 2) mod 7

Since the HP 22s does not have the mod function, we can use:

a mod b = FP( a / b ) x b

So

F=FP( (IP( 1.25 x (Year + 3)) + 2) / 7) x 7

To determine which day each month begins with, we add:

( 530526416330 / 10^(Month-1) ) mod 10 or FP( ( 530526416330 / 10^(Month-1) ) / 10) x 10

Finding if a year is a leap year (0=non leap year, 1=leap year)

1-IP( (y mod 4)/4+.75 ) or 1-IP(FP(y/4)+.75)

Adding an extra day after February for leap years (0 for months 1 and 2, and 1 for months 3 and beyond)

IP(IP(M / 3) / 4 + .75)

Bringing it all together, for the HP 22s (spaces added for ease of viewing)

W=FP( ( IP(1.25 x (Y+3)) + 2 + FP( IP(530526416330 / 10^(M-1)) / 10) x 10 + D - 1 + (1 - IP( FP(Y/4) + .75)) x IP( IP(M/3) / 4 +.75)) /7)x7

Or on the 27s, 17B, etc.:

W=MOD( IP( 1.25 x (Y+3)) + 2 + MOD( IP( 530526416330 / 10^(M-1)):10) + D - 1 + (1-IP( FP(Y/4) +.75)) x IP( IP(M/3)/4+.75):7)

For the number returned, 0=Sunday, 1=Monday, 2=Tuesday … 6=Saturday
That is amazing for such a limited machine. Brilliant!
Reference URL's