package Lire::SQLExt::LrTimegroup; use strict; use Time::Timezone; use Time::Local; use Lire::WeekCalculator; use vars qw/ $calc /; sub lr_timegroup_sec { my ( $t, $period_size ) = @_; return undef unless ( defined $t && defined $period_size ); return int($t) - ( $t % $period_size ); } sub lr_timegroup_day { my $t = $_[0]; return undef unless defined $t; return int($t) - ( $t % 86400 ) - tz_local_offset( $t ); } sub lr_timegroup_week { my ( $t, $mult ) = @_; return undef unless ( defined $t && defined $mult ); $calc ||= new Lire::WeekCalculator(); my ($month, $year) = (localtime $t )[4,5]; my $week_no = $calc->week_number( $t ); $year++ if ( $month > 1 && $week_no == 1 ); $week_no = int( ($week_no - 1) / $mult ) * $mult + 1 if $mult > 1; return $calc->week_start( $year, $week_no ); } sub lr_timegroup_month { my ( $t, $mult ) = @_; return undef unless ( defined $t && defined $mult ); my ( $month, $year ) = ( localtime $t )[4,5]; $month = int( $month / $mult ) * $mult if $mult > 1; return timelocal( 0, 0, 0, 1, $month, $year ); } sub lr_timegroup_year { my ( $t, $mult ) = @_; return undef unless ( defined $t && defined $mult ); my $year = (localtime $t)[5] + 1900; $year = int( ( $year - 1 ) / $mult ) * $mult + 1 if $mult > 1; return timelocal( 0, 0, 0, 1, 0, $year - 1900 ); } 1; __END__ =pod =head1 NAME Lire::SQLExt::LrTimegroup - FILL ME IN =head1 SYNOPSIS FILL ME IN =head1 DESCRIPTION FILL ME IN =head1 SEE ALSO Lire::DlfConverter(3pm) =head1 VERSION $Id: LrTimegroup.pm,v 1.5 2006/07/23 13:16:31 vanbaal Exp $ =head1 AUTHOR Francis J. Lacoste Wolfgang Sourdeau =head1 COPYRIGHT Copyright (C) 2003 Stichting LogReport Foundation LogReport@LogReport.org This file is part of Lire. Lire is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program (see COPYING); if not, check with http://www.gnu.org/copyleft/gpl.html. =cut