NAME
DateTimeX::Duration::SkipDays - Given a starting date, a number of days and a list of days to be skipped, returns the date X number of days away.
VERSION
version 0.002
SYNOPSIS
#!/usr/bin/perl
use strict;
use warnings;
use DateTime;
use DateTimeX::Duration::SkipDays;
my $skip_days = q(
Christmas
Christmas Eve
RRULE:FREQ=WEEKLY;BYDAY=SA,SU
);
my $skip_x_days = 30;
my $start_date = DateTime->new( 'year' => 2011, 'month' => 12, 'day' => 1 );
my $s = DateTimeX::Duration::SkipDays->new({
'parse_dates' => $skip_days,
'start_date' => $start_date,
});
my ( $span, $skipped ) = $s->add( $skip_x_days );
printf "\nCalculated Start: %s\nCalculated End: %s\n", $span->start->ymd, $span->end->ymd;
my $iter = $skipped->iterator;
while ( my $dt = $iter->next ) {
printf "\nSkipped: %s", $dt->min->ymd;
}
if ( @{ $s->bad_format } ) {
print "\n\nUnrecognized formats:";
print "\n\t$_" for @{ $s->bad_format };
}
# should output
# Calculated Start: 2011-12-01
# Calculated End: 2012-01-12
# Skipped: 2011-12-03
# Skipped: 2011-12-04
# Skipped: 2011-12-10
# Skipped: 2011-12-11
# Skipped: 2011-12-17
# Skipped: 2011-12-18
# Skipped: 2011-12-24
# Skipped: 2011-12-25
# Skipped: 2011-12-31
# Skipped: 2012-01-01
# Skipped: 2012-01-07
# Skipped: 2012-01-08
METHODS
new( [\%HASH] )
With no arguments an empty object is returned.
This method will croak if a non-hash reference is passed to it.
The possible keys for the constructor are any of the available methods below, except for add
. The add
method must be called explicitly. Unknown keys will be silently ignored.
The values have the same requirement as the matching methods.
Returns a DateTimeX::Duration::SkipDays
object.
start_date( DateTime )
start_date
is expecting a DateTime object. This will be used as the starting point for calculations.
Returns true on success.
days_to_skip
days_to_skip
accepts any object, or array of objects that will be added to the current list of days to be skipped.
Currently, DateTime, DateTime::Span, DateTime::Set, DateTime::Set::ICal and DateTime::SpanSet are known to work. Anything that can be used with DateTime::Set's union method should work.
Returns true on success
parse_dates( $SCALAR )
parse_dates
is expecting a scalar that has a newline separated list of dates. The text can contain any of the following:
- A holiday known to DateTime::Event::Holiday::US
- A RRULE -- DateTime::Format::ICal is being used to parse this input
- A formatted, or partially formatted, date string -- DateTime::Format::Flexible is being used to parse this input.
Returns true on success or false on failure.
Any line that is not recognized is silently ignored. Check bad_format
for a list of unknown formats.
bad_format
Returns a reference to an array of unrecognized formats.
add
add
expects a single integer greater than or equal to 0 (though 0 would be kind of useless).
This is the number of days into the future you are looking for.
The start_date
and days_to_skip
values need to have been populated or this method will croak.
In array context a reference to a DateTime::Span object and a DateTime::SpanSet object is returned, otherwise a reference to a hash with those objects as values is returned.
INSTALLATION
See perlmodinstall for information and options on installing Perl modules.
AUTHOR
Alan Young <harleypig@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Alan Young.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.