hi @Rolf B
unter Beachtung, daß die 1. KW ins vorherige Jahr gehören könnte, ergibt sich das Array über die darzustellenden Wochen wie folgt:
my @weeks = $fstday->kw == 52 ? (52, 1 .. $lastday->kw) : $fstday->kw == 53 ? (53, 1 .. $lastday->kw) : ($fstday->kw .. $lastday->kw);
Ansonsten bietet sich über alles ein Template an, der komplette Code:
# Template
my $tt = q(
KW Mo Di Mi Do Fr Sa So
%loop_weeks%
%kw% %1% %2% %3% %4% %5% %6% %7%
%endloop%
);
# Gegeben
my $year = 2015,
my $month = 11;
# Ausführung
my $fstday = Kalenderwoche->new( date => sprintf("%d.%d.%d", 1, $month, $year));
my $lastday = Kalenderwoche->new( date => sprintf("%d.%d.%d", $fstday->ultimo, $month, $year));
# Daten fürs Template bereitstellen
my @stash = ();
my @weeks = $fstday->kw == 52 ? (52, 1 .. $lastday->kw) : $fstday->kw == 53 ? (53, 1 .. $lastday->kw) : ($fstday->kw .. $lastday->kw);
foreach my $week( @weeks ){
my %modimi = ();
foreach my $wd(1..7){
if( $wd == $fstday->wd && $fstday->month == $month){
$modimi{$wd} = sprintf("%02d", $fstday->day);
$fstday++;
}
else{
$modimi{$wd} = '--';
}
}
push @stash, {kw => sprintf("%02d", $week), %modimi};
}
# Daten ins Template rendern
print XR::xr($tt, {weeks => \@stash});
KW Mo Di Mi Do Fr Sa So
44 -- -- -- -- -- -- 01
45 02 03 04 05 06 07 08
46 09 10 11 12 13 14 15
47 16 17 18 19 20 21 22
48 23 24 25 26 27 28 29
49 30 -- -- -- -- -- --
Und genauso kann man das natürlich auch mit PHP machen. So ist die Datumsarithmetik schön getrennt von der Darstellung. Es wäre dann nur das Template zu ändern bzw. anzupassen.
MfG