Unix and my pc give different answers when running this code. pc returns 39843 and unix returns 41338 and unix gives the correct answer.
#!/bin/perl58
use Time::Local;
$date='3/5/2013';
$dbt=&daysbetween('1/1/1904',$date);
$dbt += 1462;# for 1900-1903 plus 2 days
warn "$dbt $date and 1/1/1900\n";
#---------------------------------------------------------------------
+--------
sub daysbetween {
my($dte,$dte1)= @_;
my ( $mo, $dy, $yr) = split /\//, $dte;
my ( $mo1, $dy1, $yr1) = split /\//, $dte1;
$mo = $mo - 1;
$mo1 = $mo1 - 1;
if($dy > 31 || $dy < 1){
warn "$transid $dte $dte1\n";
return 1000000;
}
if($dy1 > 31 || $dy1 < 1){
warn "$transid $dte $dte1\n";
return 1000000;
}
if($mo > 11 || $mo < 0){
warn "$transid $dte $dte1\n";
return 1000000;
}
if($mo1 > 11 || $mo1 < 0){
warn "$transid $dte $dte1\n";
return 1000000;
}
if($yr > 2037){
warn "$transid $dte $dte1\n";
return 1000000;
}
if($yr1 > 2037){
warn "$transid $dte $dte1\n";
return 1000000;
}
my $ltime = timelocal ( 0, 0, 1, $dy, $mo, $yr );
my $ltime1 = timelocal ( 0, 0, 1, $dy1, $mo1, $yr1 );
my $days=sprintf("%.0f",($ltime1-$ltime)/86400);
return $days;
}
#---------------------------------------------------------------------
+--------