1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
#!/usr/bin/perl -w use strict; use warnings; my %test = ( 1 => { von => '02.05.2011', bis => '30.06.2011', soll => 58, }, 2 => { von => '02.05.2011', bis => '30.07.2011', soll => 88, }, 3 => { von => '02.05.2011', bis => '30.01.2012', soll => 268, }, 4 => { von => '02.05.2011', bis => '30.07.2012', soll => 448, }, 5 => { von => '02.05.2011', bis => '28.05.2011', soll => 26, }, 6 => { von => '02.05.2011', bis => '01.04.2011', soll => -31, }, ); foreach my $lfdnr (sort {$a <=> $b} keys %test) { my %callback = ( von => $test{$lfdnr}{von}, bis => $test{$lfdnr}{bis}, ); zinstage(\%callback); print "$lfdnr - $test{$lfdnr}{von} - $test{$lfdnr}{bis} soll $test{$lfdnr}{soll}: $callback{tage} ".($callback{tage} == $test{$lfdnr}{soll} ? 'OK' : 'FEHLER!'.chr(7))."\n"; } ############################ sub zinstage { my ($callback) = @_; my @von = split /\./,$callback->{von}; my @bis = split /\./,$callback->{bis}; $von[0] = 30 if $von[0] > 30; $bis[0] = 30 if $bis[0] > 30; $callback->{tage} = 30 - $von[0] + $bis[0]; if ($von[1] + 1 != $bis[1]) { $callback->{tage} += ($bis[1] - $von[1] - 1) * 30; } if ($bis[2] > $von[2]) { $callback->{tage} += ($bis[2] - $von[2]) * 360; } }
2012-08-30T08:10:57 MuffiDen Satz versteh ich nicht.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
sub zinstage { my ($callback) = @_; my @von = split /\./,$callback->{von}; my @bis = split /\./,$callback->{bis}; $von[0] = 30 if $von[0] > 30; $bis[0] = 30 if $bis[0] > 30; $callback->{tage} = 30 - $von[0] + $bis[0]; # Februarregelung if($von[1]==2) { if($von[2]%4==0){ $callback->{tage} -=1; } else { $callback->{tage} -=2; } } if ($von[1] + 1 != $bis[1]) { $callback->{tage} += ($bis[1] - $von[1] - 1) * 30; } if ($bis[2] > $von[2]) { $callback->{tage} += ($bis[2] - $von[2]) * 360; } }
1 2 3 4 5 6
my $von = date('2011-05-02'); my $bis = date('2011-07-30'); my $rel_monate = int(($bis - $von)->month); $von += $rel_monate.'M'; my $rel_tage_uebrig = ($bis - $von)->day; print $rel_monate * 30 + $rel_tage_uebrig;
2012-08-30T08:25:13 MuffiFalls ich die Beschreibung so einigermassen kapiert hab würd ichs so machen:
2012-08-30T08:41:36 MuffiMein Lösungsvorschlag geht ziemlich sicher mit Date::Calc genauso.
1 2
my ($Dy,$Dm,$Dd) = N_Delta_YMD($year1,$month1,$day1, $year2,$month2,$day2); print $Dy * 360 + $Dm * 30 + $Dd;