NAME
DateTimeX::Mashup::Shiras - a mashup for consuming multiple date formats
SYNOPSIS
package MyPackage;
use Moose;
with 'DateTimeX::Mashup::Shiras' => { -VERSION => 0.07 };
no Moose;
__PACKAGE__->meta->make_immutable;
#! C:/Perl/bin/perl
use Modern::Perl;
my $firstinst = MyPackage->new(
'date_one' => '8/26/00',
);
say $firstinst->get_date_one->format_cldr( "yyyy-MMMM-d" );
say $firstinst->get_date_one_wkend->ymd( '' );
say $firstinst->get_date_one_wkstart->ymd( '' );
say $firstinst->set_date_three( '11-September-2001' );
say $firstinst->get_date_three_wkstart->dmy( '' );
say $firstinst->set_date_one( -1299767400 );
say $firstinst->set_date_one( 36764.54167 );
say $firstinst->set_date_one( 0 );
say $firstinst->set_date_one( [0, 'epoch'] );
#######################################
# 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
#######################################
DESCRIPTION
Shiras - A small subspecies of Moose found in the western United States.
This is a Moose Role that provides combined functionality from three different DateTime::Format packages. The three modules are; DateTime::Format::DateManip, DateTime::Format::Epoch, and DateTime::Format::Excel. 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. See the "Attribute" 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 date 'getters' return DateTime objects, all the DateTime formats can be applied directly. ex. $inst->get_today_wkend->ymd( "/" ).
I learned the magic for the input coersion from The Moose is Flying (part 2) by Merlyn / Randal L. Schwartz++. Any goodness found here should be attributed there, while I accept the responsibility for any errors.
Attributes
Attributes listed here can be passed to ->new as listed below.
(date_one|date_two|date_three)
- Definition: 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.
- Default empty
- Range See DateTime::Format::Excel, DateTime::Format::Epoch, and DateTime::Format::DateManip for specific input range issues. The results will all be coerced to a DateTime instance. Currently input of Time Zones is not supported.
week_end
- Definition: This holds the definition of the last day of the week.
- Default 'Friday'
- Range This will accept either day names, day abbreviations (no periods), or day integers (1 = Monday, 7 = Sunday )
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 Moose::Manual::Roles for generic implementation instructions for Moose Roles.
set_(date_one|date_two|date_three)( $date )
- Definition: 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.
- Accepts: Any $date data that can be coerced by supported ::Format modules See the attribute definitions for the details of sending dates.
- Returns: a DateTime object
get_(date_one|date_two|date_three|today)( 'DateTime->formatcommand' )
- Definition: This is how you can call various dates and format their output. example $self->get_date_two( 'ymd( "-" )' ). Note: 'today' and 'now' are special attribute cases and do not need to be defined to be retrieved.
- Accepts: In this returns a DateTime 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" ).
- Returns: a DateTime object. If the object is passed DateTime formatting then that formatting will be applied.
get_$attribute_name_(wkend|wkstart)
- Definition: 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. 'now' does not allow a weekend method.
- Accepts: In this returns a DateTime 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" ).
- Returns: a DateTime object. If the object is passed DateTime formatting then that formatting will be applied.
SUPPORT
DateTimeX-Mashup-Shiras/issues
TODO
AUTHOR
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.
DEPENDANCIES
- Moose::Role
- MooseX::StrictConstructor
- version
- Smart::Comments - with the -ENV setting
- MooseX::Types::Moose
- MooseX::Types
- Smart::Comments
- DateTimeX::Mashup::Shiras::Types - in this CPAN package
- DateTime
- DateTime::Format::Epoch
- DateTime::Format::Excel
- DateTime::Format::DateManip