Andreas: kalenderwoche anzeigen

Beitrag lesen

Hi,

sub gib_kalenderwoche {
  my @startdatum = (1,1,$_[2]);
  my $wochentag = gib_wochentag(@startdatum);
  if ($wochentag > 3) {
    $startdatum[0] += (7 - $wochentag);
  }
  return int((datum_differenz($_[0],$_[1],$_[2],@startdatum) / 7))+1;
}
sub gib_wochentag {
  if ($_[2] < 1999) {
    return ((datum_differenz(@_,29,12,1997) % 7));
  }
  elsif ($_[2] < 2000) {
    return ((datum_differenz(@_,28,12,1998) % 7));
  }
  elsif ($_[2] < 2001) {
    return ((datum_differenz(@_,27,12,1999) % 7));
  }
  else {
    return ((datum_differenz(@_,25,12,2000) % 7));
  }
} # gib_wochentag
sub datum_differenz {
  my @akt_datum = ($_[3],$_[4],$_[5]);
  my $tage = 0;
  while (datum_kleiner(@akt_datum, $_[0], $_[1], $_[2])) {
    @akt_datum = increase_date (@akt_datum);
    $tage++;
  }
  return $tage;
} # datum_differenz
sub datum_kleiner {
  if (($_[2]*10000 + $_[1]*100 + $_[0]) < ($_[5]*10000 + $_[4]*100 + $_[3])) {
    return 1;
  }
  else {
    return 0;
  }
} # datum_kleiner
sub increase_date {
  my @akt_datum = @_;
  $akt_datum[0]++;
  if ($akt_datum[0] > gib_tage_pro_monat($akt_datum[1],$akt_datum[2])) {
    $akt_datum[0] = 1;
    $akt_datum[1]++;
  } # Monat hochzaehlen
  if ($akt_datum[1] > 12) {
    $akt_datum[1] = 1;
    $akt_datum[2]++;
  } # Jahr hochzaehlen
  return @akt_datum;
} # increase_date
sub gib_tage_pro_monat {
  my @tage_pro_monat = (0,31,28,31,30,31,30,31,31,30,31,30,31);
  if (($_[1] % 4) == 0) {
    $tage_pro_monat[2] = 29;
    if (($_[1] % 100) == 0) {
      $tage_pro_monat[2] = 28;
      if (($_[1] % 400) == 0) {
        $tage_pro_monat[2] = 29;
      } # if
    } # if
  } # if
  return $tage_pro_monat[$_[0]];
} # gib_tage_pro_monat

Mit gib_kalenderwoche([Tag],[Monat],[Jahr]) sollte das (hoffentlich) funktionieren...

Ciao
Andreas