Date-Piece
view release on metacpan or search on metacpan
lib/Date/Piece.pm view on Meta::CPAN
package Date::Piece;
$VERSION = v0.0.3;
use warnings;
use strict;
use Carp;
use Time::Piece;
{
no warnings 'redefine';
*Time::Piece::ymd = *Time::Piece::date = sub {
my $t = shift;
return Date::Piece->new($t->year, $t->mon, $t->mday);
};
}
use base 'Date::Simple';
=head1 NAME
Date::Piece - efficient dates with Time::Piece interoperability
=head1 SYNOPSIS
use Date::Piece qw(date);
my $date = date('2007-11-22');
my $time = $date->at('16:42:35');
print $time, "\n"; # is a Time::Piece
You can also start from a Time::Piece object.
use Time::Piece;
use Date::Piece;
my $time = localtime;
my $date = $time->date; # also ymd()
$date+=7;
# seven days later
print $date, "\n";
# seven days later at the original time
print $date->at($time), "\n";
=head1 ABOUT
This module allows you to do I<nominal> math on dates. That is, rather
than worrying about time zones and DST while adding increments of
24*60**2 seconds to a date&time object, you simply discard the time
component and do math directly on the date. If you need a time-of-day
on the calculated date, the at() method returns a Time::Piece object,
thus allowing you to be specific about the endpoints of a nominal
interval.
This is useful for constructs such as "tomorrow", "yesterday", "this
time tomorrow", "one week from today", "one month later", "my 31st
birthday", and various other not-necessarily-numeric intervals on the
arbitrary and edge-case-laden division of time known by most earthlings
as "the calendar." That is, adding days or months is analogous to
counting squares or turning pages on a calendar.
This module extends Date::Simple and connects it to Time::Piece. See
Date::Simple for more details.
=head1 Immutable
A Date::Piece object never changes. This means that methods like add_months() always return a new object.
This does not I<appear> to be true with constructs such as C<$date++> or
C<$date+=7>, but what is actually happening is that perl treats the
variable as an lvalue and assigns the new object to it. Thus, the
following is true:
my $also_date = my $date = today;
$date++;
$date > $also_date;
=head1 Validation
Where Date::Simple returns false for invalid dates, I throw errors.
=head1 Convenient Syntax
You may import the functions 'date' and 'today' as well as the
unit-qualifiers 'years', 'months', and 'weeks'.
When loaded as -MDate::Piece with perl -e (and/or -E in 5.10), these
extremely short versions are exported by default:
years => 'Y',
months => 'M',
weeks => 'W',
date => 'D',
today => 'CD', # mnemonic: Current Date
You may unimport any imported functions with the 'no Date::Piece'
directive.
=cut
=head1 Functions
=head2 today
This returns the current date. Don't be afraid to use it in arithmetic.
my $today = today;
my $tomorrow = today + 1;
=head2 date
my $new_year_is_coming = date('2007-12-31');
( run in 0.979 second using v1.01-cache-2.11-cpan-9789f410c06 )