NAME
DateTime::Set - Date/time sets math
SYNOPSIS
use DateTime;
use DateTime::Set;
$date1 = DateTime->new( year => 2002, month => 3, day => 11 );
$set1 = DateTime::Set->new( $date1 );
# set1 = 2002-03-11
$date2 = DateTime->new( year => 2003, month => 4, day => 12 );
$set2 = DateTime::Set->new( $date1, $date2 );
# set2 = since 2002-03-11, until 2003-04-12
$set = $set1->union( $set2 ); # like "OR", "insert", "both"
$set = $set1->complement( $set2 ); # like "delete", "remove"
$set = $set1->intersection( $set2 ); # like "AND", "while"
$set = $set1->complement; # like "NOT", "negate", "invert"
if ( $set1->intersects( $set2 ) ) { ... # like "touches", "interferes"
if ( $set1->contains( $set2 ) ) { ... # like "is-fully-inside"
# data extraction
$date = $set1->min; # start date
$date = $set1->max; # end date
# disjunct sets can be split into an array of simpler sets
@subsets = $set1->list;
$date = $subsets[1]->min;
DESCRIPTION
DateTime::Set is a module for date/time sets. It allows you to generate groups of dates, like "every wednesday", and then find all the dates matching that pattern, within a time range.
ERROR HANDLING
A method will return undef
if it can't find a suitable representation for its result, such as when trying to list()
a too complex set.
Programs that expect to generate empty sets or complex sets should check for the undef
return value when extracting data.
Set elements must be either a DateTime
or a +/- Infinity
value. Scalar values, including date strings, are not expected and might cause strange results.
METHODS
All methods are inherited from Set::Infinite.
Set::Infinite methods offset()
and quantize()
are disabled. The module will die with an error string if one of these methods are called.
New Methods
add_duration
NOTE: this is an experimental feature.
add_duration( at_start => $datetime_duration, at_end => $datetime_duration );
This method returns a new set, which is created by adding a
DateTime::Duration
to the current datetime set.It moves the whole set values ahead or back in time. It will affect the start, end, or both ends of the set intervals.
Example:
$one_year = DateTime::Duration( years => 1 ); $meetings_2004 = $meetings_2003->add_duration( at_start => $one_year, at_end => $one_year );
create_recurrence
NOTE: this is an experimental feature.
Generates recurrence intervals of "years", "months", "weeks", "days", "hours", "minutes", or "seconds".
$months = DateTime::Set->create_recurrence( time_unit => 'months' );
Recurrences can be filtered and combined, in order to build more complex recurrences.
Example:
$weeks = DateTime::Set->create_recurrence( time_unit => 'weeks' ); $one_day = DateTime::Duration( days => 1 ); $two_days = DateTime::Duration( days => 2 ); $tuesdays = $weeks->add_duration( at_start => $one_day, # +24h from week start at_end => $two_days ); # +48h from week start
SUPPORT
Support is offered through the datetime@perl.org
mailing list.
Please report bugs using rt.cpan.org
AUTHOR
Flavio Soibelmann Glock <fglock@pucrs.br>
COPYRIGHT
Copyright (c) 2003 Flavio Soibelmann Glock. All rights reserved. This program is free software; you can distribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.
SEE ALSO
Set::Infinite
For details on the Perl DateTime Suite project please see http://perl-date-time.sf.net.