Beefy Boxes and Bandwidth Generously Provided by pair Networks DiBona
Keep It Simple, Stupid
 
PerlMonks  

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
        --
        Andreas

      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 CGI.pm'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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (8)
As of 2014-04-23 19:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (553 votes), past polls