There is some math in DateTime::Event::Recurrence
that could be moved into a DateTime::Util::* module.

Most of this math is related to "week of year" and
"week of month".

I'd like to know if anyone can see some use for these
subroutines outside of DateTime::Event::Recurrence:

as_number( $datetime, unit => 'week' )

  Returns an integer, just like 'epoch', but you
  can select the unit of measure.

  $year = as_number( $today, unit => 'year' )
     # 2005
  $month = as_number( $today, unit => 'month' )
     # 2005*12+1

  Besides the common units, it can calculate
  'year_weekly' and 'month_weekly' (week of year,
  week of month).
  The subroutine accepts an iCal specification to
  select the week algorithm. It defaults to the ISO
  recommendation (week_start_day => 'mo').

  $year = as_number( $today, 
      unit => 'year_weekly',
      week_start_day => '1su' );

truncate( $datetime, to => 'year' )

  Just like the DateTime->truncate method,
  but this one can accept 'year_weekly' and 
  'month_weekly' parameters, and an optional 
  'week_start_day'.

round_up( $datetime, to => 'year' )

  Just like "truncate", but it rounds up.
  This is roughly the same as

  truncate( $dt, to => 'year' )->add( years => 1 )

  except that it also works with 'year_weekly' and 
  'month_weekly' parameters.

- Flavio S. Glock


Reply via email to