#--------------------------------------# # Edgar Date conversions. # #--------------------------------------# # These functions are copied from # "Practical astronomy with your calculator" # Peter Duffett-Smith # Cambridge University Press # Second Edition # # EDGAR Modification: don't allow fractional answers, round and take integers. # package date; # Convert date to julian day number. sub main'dtoj { ($d, $m, $y) = split('-', $_[0]); if ($m == 1 || $m == 2) { $y--; $m += 12; } if ($y > 1582 || ($y == 1582 && $m > 10) || ($y == 1582 && $m == 10 && $d > 15)) { $A = int $y / 100; $B = 2 - $A + int $A / 4; } $C = int 365.25 * $y; $D = int 30.6001 * ($m + 1); $B + $C + $D + $d + 1720994; # Here, truncate the annoying 0.5 at end } # Convert julian day number to date. sub main'jtod { $_[0] += 0.5; $I = int $_[0]; $F = $_[0] - $I; if ($I > 2299160) { $A = int (($I - 1867216.25) / 36524.25); $B = $I + 1 + $A - int $A / 4; } else { $B = $I; } $C = $B + 1524; $D = int (($C - 122.1) / 365.25); $E = int 365.25 * $D; $G = int (($C - $E) / 30.6001); $d = $C - $E + $F - int 30.6001 * $G; $d = int($d); # EDGAR mod: stop annoying fractional answers. $m = $G < 13.5 ? $G - 1 : $G - 13; $y = $m > 2.5 ? $D - 4716 : $D - 4715; "$d-$m-$y"; } # Convert date to day of week (0 = Sun 6 = Sat). sub main'd2w { $A = (&main'dtoj($_[0]) + 1.5) / 7; $X = ($A - int $A) * 7; $Y = $X - int $X; if ($Y > .5) { $X = int $X + 1; } elsif ($X > 0) { $X = int $X; } $X; } 1;