Perl :: Aufgabe #8
1 Lösung

Datumsberechnung ohne Wochenendtage und Feiertage
Anfänger - Perl
von Gustl
- 10.08.2012 um 19:54 Uhr
Schreiben Sie eine Subroutine welcher 2 Argumente übergeben werden.
1. Parameter: ein Datum (2012-08-12)
2. Parameter: Anzahl der Tage die zu dem Datum addiert bzw. abgezogen werden.
Die Subroutine soll dann das Datum minus oder plus der Anzahl der übergebenen Tage ohne Wochenendtage (Samstag, Sonntag) und ohne Feiertage, quasi nur die Werktage, berechnen und zurückgeben.
Beispiel:
Perl-Code
Da die Feriertage von Bundesland zu Bundeslad nicht immer gleich sind, sind diese frei wählbar.
1. Parameter: ein Datum (2012-08-12)
2. Parameter: Anzahl der Tage die zu dem Datum addiert bzw. abgezogen werden.
Die Subroutine soll dann das Datum minus oder plus der Anzahl der übergebenen Tage ohne Wochenendtage (Samstag, Sonntag) und ohne Feiertage, quasi nur die Werktage, berechnen und zurückgeben.
Beispiel:

# 2012-08-10 - Freitag my $new_datum = get_date_workdays("2012-08-10", 5); print $new_datum; # 2012-08-17
Da die Feriertage von Bundesland zu Bundeslad nicht immer gleich sind, sind diese frei wählbar.
Lösungen:

#!/usr/bin/perl use warnings ; use strict ; use DateTime ; sub get_date_workdays { my $startdate = shift ; my $daynumber = shift ; my ( $year , $month , $day ) = split( /\-/ , $startdate ) ; my $dt = DateTime->new( year => $year , month => $month , day => $day ) ; my $n = 0 ; while ( $n != $daynumber ) { $dt->add( days => 1 ) ; my $dow = $dt->day_of_week ; if ( $dow != 6 && $dow != 7 ) {#we count working days only $n++ ; } } return $dt->ymd ; } my $new_datum = get_date_workdays( "2012-08-10" , 5 ) ; print $new_datum . "\n" ;