Try this:

  use DateTime::Event::Recurrence;
  use DateTime;

  $seven = DateTime::Event::Recurrence->daily ( hours => [ 7, 19 ] );
  print $seven->next( DateTime->now )->datetime;

- Flavio S. Glock


Rick Measham wrote:
> 
> Attached is DateTime::Event::DateTime. No tests, no docs.
> 
> This module is a very basic event module. Given parts of a datetime
> it can return the following, previous and closest datetime object.
> 
> The module was inspired by Ben Bennet who at 8:01 PM -0400 13/7/03, wrote:
> >I vote that you assume the next valid instance of the time (e.g. if
> >they say 4 o'clock and it is 11 PM now, assume 4AM of the following
> >day).
> 
> So this module does just that. Rather than finding the next 'easter'
> or 'sunset', this module finds the next valid datetime matching the
> parameters.
>         $seven_pm = DateTime::Event::DateTime->new(
>                 hour => 19,
>                 truncate => 'hour'
>         );
> 
>         $dt = $seven_pm->following( datetime => DateTime-now() )
>         # Gets the next 7pm after now.
> 
> The module can also be used non-OO:
>         $dt = previous(
>                 datetime => DateTime->now(),
>                 hour => 19
>         );
>         # Returns 19:59:59.999999999, which is the last valid
> DateTime with the hour '19'.
> 
> Because 'previous' returns results that may be unexpected, the
> truncate parameter exists.
> 
> Of course you could just:
>         $dt = previous(
>                 datetime => DateTime->now(),
>                 hour => 19
>         )->truncate( to => 'hour' );
> 
> But adding the truncate allows us to subclass easily:
>         package DateTime::Event::DateTime::Christmas
>         use strict;
>         use DateTime::Event::DateTime;
>         use vars qw(@ISA);
>         @ISA = qw(DateTime::Event::DateTime);
>         sub new {
>                 return $_[0]->SUPER::new(
>                         day => 25,
>                         month => 12,
>                         truncate => 'day'
>                 );
>         }
> 
> So now we can:
>         $christmas = new DateTime::Event::DateTime::Christmas;
>         $next_christmas = $christmas->next()
> 
> Note: All methods revert to DateTime->now() if they're not given a
> datetime parameter.
> 
> This module contains a free set of steak knives:
> - DateTime::Event::DateTime::Christmas
> - DateTime::Event::DateTime::NewYearsEve
> and will include extra steak knives upon release.
> 
> Will this be useful to anyone other than me?

Reply via email to