sub Day_of_Week { my ( $year, $month, $day ) = @_; if ( $month < 3 ) { $month += 12; --$year; } my $day_of_week = $day + 2 * $month + int( .6 * ( $month + 1) ) + $year + int( $year / 4 ) - int( $year / 100 ) + int( $year / 400) + 2; $day_of_week = int(( $day_of_week / 7 - int( $day_of_week / 7 )) * 7 + .5); return $day_of_week; } # From Ovid's post at node 139108 (with some modifications) # sub Days_in_Month { my ( $year, $month ) = @_; my @days_in_month = qw/ 31 28 31 30 31 30 31 31 30 31 30 31 /; if ( --$month == 1 ) { return 29 if leap_year( $year ); } return $days_in_month[ $month ]; } sub leap_year { my $year = shift; return ( 0 == $year % 4 and 0 != $year % 100 or 0 == $year % 400 ) ? 1 : 0; }