### ## Convert a YYYY-MM-DD date to a Julian date ### sub date_to_julian ( $ ) { my $date = shift @_; my $y = substr($date, 0, 4); my $m = substr($date, 5, 2); my $d = substr($date, 8, 2); my $j = int((1461 * ($y + 4800 + int(($m - 14) / 12))) / 4) + int((367 * ($m - 2 - 12 * int((($m - 14) / 12)))) / 12) - int((3 * int((($y + 4900 + int(($m - 14) / 12)) / 100))) / 4) + $d - 32075; return $j; } ### ## Convert a Julian date to YYYY-MM-DD date ### sub julian_to_date ( $ ) { my $j = shift @_; my ($l, $n, $i, $d, $m, $y); $l = $j + 68569; $n = int((4 * $l) / 146097); $l = $l - int((146097 * $n + 3) / 4); $i = int((4000 * ($l + 1)) / 1461001); $l = $l - int((1461 * $i) / 4) + 31; $j = int((80 * $l) / 2447); $d = $l - int((2447 * $j) / 80); $l = int($j / 11); $m = $j + 2 - (12 * $l); $y = 100 * ($n - 49) + $i + $l; return sprintf("%04d-%02d-%02d", $y, $m, $d); } ### ## Print all the dates between a start and end date ### my $start_date = date_to_julian("2005-07-12"); my $end_date = date_to_julian("2005-08-03"); for (my $i = $start_date; $i <= $end_date; $i++) { print julian_to_date($i), "\n"; }