Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Calculate date with days

by darrengan (Sexton)
on Aug 24, 2005 at 05:01 UTC ( #486096=perlquestion: print w/ replies, xml ) Need Help??
darrengan has asked for the wisdom of the Perl Monks concerning the following question:

Hie friends, How do i use system date to calculate a date with a given number of days? e.g. 24/08/2005 add 3 days = 27/08/2005 and 24/08/2005 add 10 days = 03/09/2005 any idea? Cheers mate, Darren

Florist In Malaysia

Comment on Calculate date with days
Re: Calculate date with days
by pg (Canon) on Aug 24, 2005 at 05:07 UTC
    use Data::Dumper; use strict; use warnings; my $offset = 3; print Dumper(localtime(time())); print "\n"; print Dumper(localtime(time() + 24 * 3600 * $offset));
      hie pg, i am totally new to perl. for the Data::Dumper, do i need to install this component or it is already included in the system? Cheers, Darren
        Data::Dumper is a core perl Module i.e. should come with Perl. Check the link to see more information about it.

        A simple use case

        #!/usr/bin/perl use Data::Dumper; use strict; use warnings; my @list = qw (hi there); print Dumper(@list);

        Output

        $VAR1 = 'hi'; $VAR2 = 'there';

        Data::Dumper is actually not needed, and it was just a handy way to display the result:

        use strict; use warnings; my $offset = 3; display(reverse((localtime(time()))[0 .. 5])); display(reverse((localtime(time() + 24 * 3600 * $offset))[0 .. 5])); sub display { my @t = @_; printf("%d-%02d-%02d-%02d:%02d:%02d\n", $t[0] + 1900, $t[1] + 1, @ +t[2 .. 5]); }
Re: Calculate date with days
by chester (Hermit) on Aug 24, 2005 at 05:27 UTC
    I assume there's a typo in your post, and the second date result should be 03/09/2005?

    So far as installing modules, it's usually as simple as running perl -MCPAN -e 'install Date::Calc' if you use *nix, or using ppm in Windows. You can see here for more info: http://www.cpan.org/misc/cpan-faq.html

    This is another solution to your question, using Date::Calc:

    use strict; use warnings; use Date::Calc qw(Add_Delta_Days); my ($year, $month, $day); ($year, $month, $day) = Add_Delta_Days(2005,8,24,3); printf "%02d/%02d/%4d\n", $day, $month, $year; ($year, $month, $day) = Add_Delta_Days(2005,8,24,10); printf "%02d/%02d/%4d\n", $day, $month, $year;
      I almost always use an array instead of ($year, $month, $day) when working with Date::Calc -- faster to type and clearer to read (especially with the functions like Delta_Days that take two dates). (of course functionally it's exactly the same)
      use Date::Calc qw(Add_Delta_Days); my $date_str = "24/08/2005"; my @start = reverse split "/", $date_str; # convert to (YYYY, MM, DD +) array my @d = Add_Delta_Days(@start,3); printf "%02d/%02d/%4d\n", $d[2,1,0]; # print DD/MM/YYYY format @d = Add_Delta_Days(@start,10); printf "%02d/%02d/%4d\n", $d[2,1,0]; # print DD/MM/YYYY format
Re: Calculate date with days
by fauria (Deacon) on Aug 24, 2005 at 08:05 UTC
    #cdate.pl use strict; use Date::Manip qw (DateCalc ParseDate UnixDate); my $input = ParseDate shift or die 'I need a date'; my $date = DateCalc $input, "+3 days"; my @format = ('%B ', '%e, ', '%Y'); print UnixDate($date, @format)."\n";
    Example:
    perl cdate.pl 20050824
    perl cdate.pl 08/24/2005
    perl cdate.pl `date`
(dkubb) Re: (1) Calculate date with days
by dkubb (Deacon) on Aug 24, 2005 at 08:44 UTC
    Here's another approach using DateTime:
    use strict; use warnings; use DateTime; my $dt = DateTime->new(year => '2005', month => '08', day => '24'); $dt->add(days => 10); print $dt->dmy('/'), "\n";
    Dan Kubb, Perl Programmer
Re: Calculate date with days
by sunadmn (Curate) on Aug 24, 2005 at 14:30 UTC
    I would suggest you take a look at Time::HiRes Thi s should take care of all the hard work for you.
    SUNADMN
    USE PERL
Re: Calculate date with days
by darrengan (Sexton) on Aug 25, 2005 at 02:21 UTC
    Hie fellow friends... Thanks for the feedback and tips. I found that the script provided by "pg" eventually solved my problem. It is straight forward. my $offset = 3; display(reverse((localtime(time()))0 .. 5)); display(reverse((localtime(time() + 24 * 3600 * $offset))0 .. 5)); sub display { my @t = @_; printf("%d-%02d-%02d-%02d:%02d:%02d\n", $t[0] + 1900, $t1 + 1, @ +t2 .. 5); } Thanks so much

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (7)
As of 2014-07-12 22:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (241 votes), past polls