Types::DateTime(3) type constraints and coercions for datetime objects

SYNOPSIS


package FroobleGala;

use Moose;
use Types::DateTime -all;

has start_date => (
is => 'ro',
isa => DateTimeUTC->plus_coercions( Format['ISO8601'] ),
coerce => 1,
);

DESCRIPTION

Types::DateTime is a type constraint library suitable for use with Moo/Moose attributes, Kavorka sub signatures, and so forth.

Types

This module provides some type constraints broadly compatible with those provided by MooseX::Types::DateTime, plus a couple of extra type constraints.
"DateTime"
A class type for DateTime. Coercions from:
from "Num"
Uses ``from_epoch'' in DateTime. Floating values will be used for sub-second precision, see DateTime for details.
from "HashRef"
Calls ``new'' in DateTime or ``from_epoch'' in DateTime as appropriate, passing the hash as arguments.
from "Now"
Uses ``now'' in DateTime.
from "InstanceOf['DateTime::Tiny']"
Inflated using ``DateTime'' in DateTime::Tiny.
"Duration"
A class type for DateTime::Duration. Coercions from:
from "Num"
Uses ``new'' in DateTime::Duration and passes the number as the "seconds" argument.
from "HashRef"
Calls ``new'' in DateTime::Duration with the hash entries as arguments.
"Locale"
A class type for DateTime::Locale. Coercions from:
from "Str"
The string is treated as a language tag (e.g. "en" or "he_IL") and given to ``load'' in DateTime::Locale.
from "InstanceOf['Locale::Maketext']"
The "Locale::Maketext/language_tag" attribute will be used with ``load'' in DateTime::Locale.
"TimeZone"
A class type for DateTime::TimeZone. Coercions from:
from "Str"
Treated as a time zone name or offset. See ``USAGE'' in DateTime::TimeZone for more details on the allowed values.

Delegates to ``new'' in DateTime::TimeZone with the string as the "name" argument.

"Now"
Type constraint with only one allowed value, the string ``now''.

This is exported for compatibility with MooseX::Types::DateTime, which exports such a constraint, even though it is not documented.

"DateTimeWithZone"
A subtype of "DateTime" for objects with a defined (non-floating) time zone.

This type constraint inherits its coercions from "DateTime".

"DateTimeWithZone[`a]"
The "DateTimeWithZone" type constraint may be parameterized with a DateTime::TimeZone object, or a string that can be coerced into one.

   has start_date => (
      is      => 'ro',
      isa     => DateTimeWithZone['Europe/London'],
      coerce  => 1,
   );

This type constraint inherits its coercions from "DateTime", and will additionally call ``set_time_zone'' in DateTime to shift objects into the correct timezone.

"DateTimeUTC"
Shortcut for "DateTimeWithZone["UTC"]".

Named Coercions

It is hoped that Type::Tiny will help avoid the proliferation of modules like MooseX::Types::DateTimeX, MooseX::Types::DateTime::ButMaintained, and MooseX::Types::DateTime::MoreCoercions. It makes it very easy to add coercions to a type constraint at the point of use:

   has start_date => (
      is      => 'ro',
      isa     => DateTime->plus_coercions(
         InstanceOf['MyApp::DT'] => sub { $_->to_DateTime }
      ),
      coerce  => 1,
   );

Even easier, this module exports some named coercions.

"Format[`a]"
May be passed an object providing a "parse_datetime" method, or a class name from the "DateTime::Format::" namespace (upon which "new" will be called).

For example:

   DateTime->plus_coercions( Format['ISO8601'] )

Or:

   DateTimeUTC->plus_coercions(
      Format[
         DateTime::Format::Natural->new(lang => 'en')
      ]
   )
"Strftime[`a]"
A pattern for serializing a DateTime object into a string using ``strftime'' in DateTime.

   Str->plus_coercions( Strftime['%a %e %b %Y'] );
"ToISO8601"
A coercion for serializing a DateTime object into a string using ``iso8601'' in DateTime.

   Str->plus_coercions( ToISO8601 );

AUTHOR

Toby Inkster <[email protected]>.

COPYRIGHT AND LICENCE

This software is copyright (c) 2014 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

DISCLAIMER OF WARRANTIES

THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.