Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

Date manipulations by inbuilt modules.

by valavanp (Curate)
on Aug 28, 2007 at 09:49 UTC ( #635544=perlquestion: print w/replies, xml ) Need Help??
valavanp has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks,
I used the following code for displaying the date from now 60 days added to it. Is there anyway of doing this functionality with inbuilt modules. Thanks all for your valuable suggestions.
#Method 1 use Date::Simple ('date', 'today'); # Offset $n days from now: $n=60; $date = today() + $n; print "$date\n"; #Method 2 use DateTime; my $dt = DateTime->now()-> add( days => 60 ); print $dt;

Replies are listed 'Best First'.
Re: Date manipulations by inbuilt modules.
by moritz (Cardinal) on Aug 28, 2007 at 09:56 UTC
    I don't know why you don't want to rely on perfectly good external modules, but here is a solution:

    my $n = 60; my @time_array = localtime($n * 24 * 3600 + time);
    You can learn the meaning of the entries in @time_array from the localtime documentation.

      A good reason to use modules is that people make many mistakes when trying to reimplement the code, like you did. You incorrectly assumed all days are 24*60*60 seconds long. Solution:

      use Time::Local qw( timegm ); my ($today_y, $today_m, $today_d) = (localtime())[5,4,3]; $today_m += 1; $today_y += 1900; # Use gmt for date arithmetic, # even if the date is localtime. my $today_date = timegm(0,0,0,$today_d,$today_m-1,$today_y); # Every day *is* 24*60*60 long in GMT. my $plus60_date = $today_date + 24*60*60 * 60; my ($plus60_y, $plus60_m, $plus60_d) = (gmtime($plus60_date))[5,4,3]; $plus60_m += 1; $plus60_y += 1900; printf("Today: %d/%02d/%02d\n", $today_y, $today_m, $today_d); printf("In 60 days: %d/%02d/%02d\n", $plus60_y, $plus60_m, $plus60_d);
      Today: 2007/08/28 In 60 days: 2007/10/27

      - ikegami

      hi moritz,
      thanks for your reply. If i want to use the Date::Calc module how should i do that. Thanks for your reply.
        $ perl -l use strict; use warnings; use Date::Calc qw(Add_Delta_Days Today_and_Now); my ($year,$month,$day,$hour,$min,$sec) = Today_and_Now(); print join(q{-},$year,$month,$day); ($year,$month,$day) = Add_Delta_Days($year,$month,$day,60); print join(q{-},$year,$month,$day); __END__ 2007-8-28 2007-10-27
Re: Date manipulations by inbuilt modules.
by SFLEX (Chaplain) on Aug 28, 2007 at 11:48 UTC
    I sometimes like to use's function for time, its the time funtion for the cookie.
    Has an easy way to input what days, month's, years, est. ahead.
    #!/usr/bin/perl use CGI; my $self = CGI::Util::expire_calc('',''); my $selfa = CGI::Util::expires('now',''); my $self2 = CGI::Util::expire_calc('+60d',''); my $selfb = CGI::Util::expires('+60d',''); print "Content-type: text/html\n\n"; print "<html>Current: $self<br>$selfa<hr>+60 days: $self2<br>$selfb<hr +></html>\n";
Re: Date manipulations by inbuilt modules.
by Anonymous Monk on Aug 28, 2007 at 09:58 UTC
    Is there anyway of doing this functionality with inbuilt modules?
    Back too school. Homework season.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://635544]
Approved by moritz
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (3)
As of 2017-06-29 11:46 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (660 votes). Check out past polls.