Thread Addition von Geschäftstagen (25 answers)
Opened by tejste at 2013-07-22 10:17

Linuxer
 2013-07-22 13:46
#168999 #168999
User since
2006-01-27
3882 articles
HausmeisterIn

user image
Oder man erweitert sich DateTime um entsprechende Methoden:

Code (perl): (dl )
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
#! /usr/bin/perl
use strict;
use warnings;
use DateTime;

# Quick-Hacked: extend DateTime to set/check for business days
{ 
        # default setting: 1-5 (Mo-Fr) are business days
        my %business_days;
        @business_days{1..5} = (1)x5;

        # Method to define business days
        sub DateTime::set_business_days {
                my $self = shift;
                %business_days = ();
                $business_days{$_} = 1          for @_;
        }

        # Method if given wday is a business day
        sub DateTime::is_business_day {
                my $self = shift;
                my $wday = $self->wday;

                return 1        if $business_days{$wday};
                return 0;
        }
}


my $day1 = DateTime->now( time_zone => 'Europe/Berlin' );
$day1->set_business_days( 1 .. 5 );

my $add = 7;

while ( $add ) {
        $day1->add( days => 1 );
        my $wday = $day1->wday;
        $add--  if $day1->is_business_day;
}

print $day1->ymd, $/;


Sicherlich wären noch ein paar Checks sinnvoll; Vorsicht ist auch bei den Namen für die Methoden geboten; die sollten keine bestehenden Methoden überschreiben; Sollte DateTime mal erweitert werden, kann sowas passieren.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Addition von Geschäftstagen