| autobox-DateTime-Duration documentation | Contained in the autobox-DateTime-Duration distribution. |
autobox::DateTime::Duration - ActiveSupport equivalent to Perl numeric variables
use autobox; use autobox::DateTime::Duration; # equivalent to DateTime::Duration->new(months => 1, days => 5); $duration = 1->month + 2->days; # equivalent to DateTime->now->add(years => 2); $datetime = 2->years->from_now; # equivalent to DateTime->now->add(months => 4, years => 5); $datetime = (4->months + 5->years)->from_now; # equivalent to DateTime->now->subtract(days => 3); $datetime = 3->days->ago;
autobox::DateTime::Duration is an autobox module to add Time-related methods to core integer values by using constant overloading. Inspired by ActiveSupport (Rails) Core extensions to Numeric values.
Tatsuhiko Miyagawa <miyagawa@bulknews.net>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| autobox-DateTime-Duration documentation | Contained in the autobox-DateTime-Duration distribution. |
package autobox::DateTime::Duration; use strict; use 5.8.1; our $VERSION = '0.02'; use autobox; use DateTime; use DateTime::Duration; for my $accessor (qw( day hour minute month second week year )) { no strict 'refs'; my $plural = $accessor . "s"; *{"SCALAR::$accessor"} = *{"SCALAR::$plural"} = sub { DateTime::Duration->new($plural => $_[0]); }; } sub SCALAR::fortnight { DateTime::Duration->new(weeks => 2 * $_[0]); } *SCALAR::fortnights = \&SCALAR::fortnight; sub DateTime::Duration::ago { my $duration = shift; my $dt = $_[0] ? $_[0]->clone : DateTime->now; $dt->subtract_duration($duration); } *DateTime::Duration::until = \&DateTime::Duration::ago; sub DateTime::Duration::from_now { my $duration = shift; my $dt = $_[0] ? $_[0]->clone : DateTime->now; $dt->add_duration($duration); } *DateTime::Duration::since = \&DateTime::Duration::from_now; 1; __END__