[SP-pm] Probleminha com datas... (Já era)
Luis Motta Campos
luismottacampos em yahoo.co.uk
Quarta Maio 30 08:07:40 PDT 2007
On May 30, 2007, at 3:22 PM, Nelson Ferraz wrote:
>> O que eu preciso fazer é obter todos os dias entre $basedate e
>> $basedate+$interval. Alguém tem alguma sugestão melhor do que um loop
>> para calcular um dia de cada vez?
>
> Você pode usar os módulos de DateTime-Set, do Flávio Glock, para
> lidar com conjuntos de datas. Por exemplo:
>
> use DateTime;
> use DateTime::Span;
Minha implementação original, sem módulos:
sub list_days {
my ( $start_date, $interval ) = @_;
my $end_date = $start_date + DateTime::Duration->new( days =>
$interval );
my $pointer = $start_date->clone;
my @days;
while( $pointer < $end_date ) {
push @days, $pointer->clone;
$pointer->add( days => 1 );
}
return @days;
}
A implementação usando os módulos (elegantíssimos) do Flávio Glock:
sub list_days {
my ( $start_date, $interval ) = @_;
return map { $_->ymd('') } DateTime::Set->from_recurrence(
span => DateTime::Span->from_datetime_and_duration( start =>
$basedate, days => $interval ),
recurrence => sub { return $_[0]->is_infinite ? $_[0] : $_
[0]->truncate( to => 'day' )->add( days => 1 ); }
)->as_list;
}
@Vienna = map { $Offer::Drink( to => $_ ) } Flávio, Nélson;
Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}
Mais detalhes sobre a lista de discussão SaoPaulo-pm