Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

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;

Comment on Date manipulations by inbuilt modules.
Download Code
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.
      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

      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

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.
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";

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://635544]
Approved by moritz
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (7)
As of 2015-07-03 06:46 GMT
Find Nodes?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...

    Results (48 votes), past polls