=head1 DateTimeX::Mashup::Shiras A mashup for consuming multiple date formats =head1 SYNOPSIS package MyPackage; use Moose; with 'DateTimeX::Mashup::Shiras' => { -VERSION => 0.014 }; no Moose; __PACKAGE__->meta->make_immutable; #!perl my $firstinst = MyPackage->new( 'date_one' => '8/26/00', ); print $firstinst->get_date_one->format_cldr( "yyyy-MMMM-d" ) . "\n"; print $firstinst->get_date_one_wkend->ymd( '' ) . "\n"; print $firstinst->get_date_one_wkstart->ymd( '' ) . "\n"; print $firstinst->set_date_three( '11-September-2001' ) . "\n"; print $firstinst->get_date_three_wkstart->dmy( '' ) . "\n"; print $firstinst->set_date_one( -1299767400 ) . "\n"; print $firstinst->set_date_one( 36764.54167 ) . "\n"; print $firstinst->set_date_one( 0 ) . "\n"; print $firstinst->set_date_one( [0, 'epoch'] ) . "\n"; ####################################### # Output of SYNOPSIS # 01:2000-August-26 # 02:20000901 # 03:20000826 # 04:2001-09-14T00:00:00 # 05:08092001 # 06:1928-10-26T09:30:00 # 07:2000-09-01T13:00:00 # 08:1900-01-05T00:00:00 # 09:1970-01-02T00:00:00 ####################################### =head1 DESCRIPTION L - A small subspecies of Moose found in the western United States. This is a Moose L that provides combined functionality from three different DateTime::Format packages. The three modules are; L, L, and L. It then uses the Moose type coersion system to choose the correct way to format the date. This means that all input strings are parsed by ::Format::DateManip. All numbers are parsed either by ::Format::Excel or ::Format::Epoch. Since the numbers of each overlap, the rule is all positive numbers under 7 positions left of the decimal are given to ::Excel and negative integers and integers of 7 or greater positions are given to ::Epoch. Numbers outside of this range fail the type constraints. I section below for a way to force the numerical values to be parsed by the non-preffered formatter in the overlap.> Currently the Epoch is fixed at midnight 1-January-1970. Since all the succesful date 'getters' return DateTime objects, all the L methods can be applied directly. ex. $inst->get_today_wkend->ymd( "/" ). I learned the magic for the input coersion from L by Merlyn / Randal L. Schwartz++. Any goodness found here should be attributed there, while I accept the responsibility for any errors. =head2 Attributes Attributes listed here can be passed to -Enew as listed below. =head3 (date_one|date_two|date_three) =over B these are date attributes that can be accept data that can be formatted via any of the supported DateTime::Format modules. All positive real numbers with 6 or fewer positions left of the decimal will be treated as Excel dates. All integers over 7 digits will be treated as epoch seconds from 1-January-1970. Negative decimals will fail! To force an integer with less than 7 digits into an epoch format send the value as an array ref with the number in the first position and 'epoch' in the second position. ex. [ 60, 'epoch' ] To force a number into excel formatting do the same with 'excel' in the second position. B empty B See L, L, and L for specific input range issues. The results will all be coerced to a L instance. Currently input of Time Zones is L. =back =head3 week_end =over B This holds the definition of the last day of the week. B 'Friday' B This will accept either day names, day abbreviations (no periods), or day integers (1 = Monday, 7 = Sunday ) =back =head2 Methods Methods are used to manipulate both the public and private attributes of this role. All attributes are set as 'ro' so other than ->new( ) these methods are the only way to change, read, or clear attributes. See L for generic implementation instructions. =head3 set_(date_one|date_two|date_three)( $date ) =over B This is another way to set (or change) the various dates if additional input is required after the initial declaration of ->new( 'attribute' => 'value', ) command. B Any $date data that can be coerced by L See DateTime::Format::Excel> modules. B a DateTime object =back =head3 get_(date_one|date_two|date_three|today)( 'DateTime->formatcommand' ) =over B This is how you can call various dates and format their output. example $self->get_date_two( 'ymd( "-" )' ). For this example the date_two attribute had been previously set. B 'today' and 'now' are special attribute cases and do not need to be defined to be retrieved. B This returns a L object which will stringify to scalar data by default. However, if you want to format the output then call the '->get_$attribute_name' method with the additional DateTime formatting tagged on the end. ex. ->get_today->format_cldr( "yyyy-MMMM-d" ). B a DateTime object. If the object is passed DateTime methods then the format determined by that method will be applied. =back =head3 get_$attribute_name_(wkend|wkstart) =over B This is a way to call the equivalent start and end of the week definded by the given 'week_end' attribute value. All dates listed above including 'today' can be substitued for $attributename. I<'now' does not provide a weekend extrapolation.> B This returns a L object which will stringify to scalar data by default. However, if you want to format the output then call the '->get_$attribute_name' method with the additional DateTime formatting tagged on the end. ex. ->get_today->format_cldr( "yyyy-MMMM-d" ). B a DateTime object. If the object is passed DateTime formatting then that formatting will be applied. =back =head1 SUPPORT L =head1 TODO =over B<1.> Support Timezone input and changes B<2.> Support custom epoch input and changes B<3.> Add L debugging in exchange for L =back =head1 AUTHOR =over Jed jandrew@cpan.org =back =head1 COPYRIGHT This program is free software; you can redistribute 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. =head1 DEPENDENCIES =over L L L L L B =over L L L L =back =back =head1 SEE ALSO =over L L L L L =back =head1 Build from Source - (for example git) Download a compressed file with the code Extract the code from the compressed file Change into the extracted directory (For Windows find what version of make was used to compile your perl) perl -V:make Then >perl Makefile.PL >make >make test >make install >make clean (use the windows make version as appropriate (dmake?))